İşte durumda benim cevap kısaltılmış versiyonu, herkes bir TLDR an:
- "Kullanıcılar" adında bir dizin oluşturun.
. Dizinde, aşağıdaki mod_rewrite ile bir htaccess dosyası yapmak:
REQUEST_URIRewriteEngine on
RewriteRule !\.(gif|jpg|png|css)$ /your_web_root/users/index.php'REQUEST_URI
Şimdi kullanıcıların dizine yapılan parantez herhangi uzantıları için değil tüm sayfa istekleri index.php gidecek
index.php kullanıcı koymak URL'sini alır ve sonunda biraz kapmak. Bunu yapmanın yolları ton vardır, burada son bölümü her zaman bir kullanıcı adı ve olacak biliyorum eğer basit değil, belki de, kullanıcı adı / resimler /:
$url_request = $_SERVER['REQUEST_URI']; //Returns path requested, like "/users/foo/"
$user_request = str_replace("/users/", "", $url_request); //this leaves only 'foo/'
$user_name = str_replace("/", "", $user_request); //this leaves 'foo'
Şimdi, sadece bu kullanıcı adı için DB için bir sorgu yapmak. / Users/404.php: Varsa o komut yönlendirme yoksa, index.php, profil çıktılar
Kullanıcı mevcut Ama eğer, tüm ziyaretçi göreceksiniz onlar koymak olduğunu
www.example.org/users/foo/
ve Foo kullanıcı sayfasına lazım.
Yararlanmak için bir hacker için hiçbir olsun değişkenleri ve bir başka blog veya kartvizit URL koymak kolay, oldukça.
Aslında, "?" Kurtulmak mümkün ve güzel bir basit www.example.org / users / someusername var.
Ben bu konuda öğrendim Quack makalesinde "How to Succeed with URLs" üzerinde Till üzerinde A List Apart.
Yani. Htaccess ve mod_rewrite, Apache anlamak gerekir, ve bu yöntem onlar için güvenlik riskleri ve hesap anlamak için gerektirir. Burada temel fikir:
Sen "kullanıcılar" adında bir dizin oluşturun (eğer zorunda değilsiniz, ama bu her şeyi basitleştirmek olacaktır), ve bu dizinde, etkili "tüm dosya ya da dizin istekleri diyor mod_rewite içeren. Htaccess dosyasını koymak kullanıcıya göndermek için idare edecek (görüntüler, PDF) bu komut gönderilmesi gereken belli bir tür, bir değil. " Makale mod_rewrite bu gibi görünüyor:
RewriteEngine on
RewriteRule !\.(gif|jpg|png|css)$ /your_web_root/index.php
Benim örnekte "/ your_web_root / users / index.php" olacağını yerine sayfada TÜM isteklerini işleme Bu komut, sadece kullanıcı dizininde olanlar ile uğraştığını, çünkü daha basit nedeni de budur.
Sonra diyor bir php komut dosyası var "tamam, URL ne verildi?" ve bu temelde (çok sonunda başka bir varsa, ya da iki) son isminden sonra parçasını kapmak ve (bu gerçekten çok önemli) bulur ve ne diyor sanitizes "Bu kullanıcı adı benim DB var mı?" Eğer evet ise, o kullanıcının profiline istekte gönderir, ama güzel bir URL ile (biz ikinci bir o kadar alırsınız), değilse, o bir "Kullanıcı bulunamadı" sayfası, ya da ne istersen onları gönderir.
Sizin kullanıcı bulmak yaparsa Yani, PHP komut dosyası çıktı (Yine bunu sterilize emin olun kullanıcı profili ile olabilecek herhangi bir pislik kullanıcı olabilir -. Onlara fırsat vermek - eğer kendi profiline içine kötü niyetli kod gömmek, profilini views tarayıcıları bilerek) bu kodu çalıştıracaktır. Istenen sayfa beri:
www.example.org/users/example_user
ve yerine bir yönlendirme mod_rewrite kullanarak bu yana, URL aynı kalır ve. Htaccess dosyası yukarı çeker komut sadece kullanıcı profilini döker. Ziyaretçiye, onlar sadece yukarıdaki url koymak olduğunu görmek ve kullanıcı profili gösterdi.
Ayrıca yerine basitçe çıktı "user_not_found" sayfa sahip, bir "kullanıcı bulunamadı" sayfasına yönlendirme yapmak kullanıcı için denetler PHP script istiyorum. Bu koyar böylece isteyenlerdir:
www.example.org/users/blabhaboehbohe
Için URL değişikliği göreceksiniz
www.example.org/users/notfound/
yerine görme URL aynı kalır. Bir hacker URL değişmez görürse, onlar şimdi bir mod_rewrite kullanarak biliyorum ve böylece gerçek çıkışını işleme bir komut olması gerekir. Onlar da biliyor, onlar açık bırakmış olabilir her güvenlik açığı için arayan deli gidiyor başlayabilirsiniz.
şerefe.