Girdiyi başka bir yolu emin yalnızca izin verilen karakterleri emin olmaktır (hayır "/", "." ":", ...) Içinde. Ancak bad karakter için bir kara liste, ama izin verilen karakter için bir beyaz liste kullanmayın:
$page = preg_replace('[^a-zA-Z0-9]', '', $page);
... Bir file_exists izledi.
Sadece komut idam olmak istiyorum emin olabilirsiniz bu şekilde (izin verilmez çünkü "." Örneğin bu, bir "blabla.inc.php" ekarte ederim) yürütülür.
Not: Bu tür bir öyle bütün yasaklanmış karakterleri kaldırarak, çünkü o, kullanıcı "ev" yürütebilir ve "ev" sayfasını verecek çünkü, "hack". Bu sayfa ile şirin şeyler istiyoruz "smartasses" durdurmak amacıyla değil, ama insanlar really bad şeyler yapıyor durdurmak olacaktır.
BTW: Eğer yapabileceği başka bir şey .htaccess dosya açık saldırı girişimlerini önlemek için:
RewriteEngine on
RewriteCond %{QUERY_STRING} http[:%] [NC]
RewriteRule .* /–http– [F,NC]
RewriteRule http: /–http– [F,NC]
Tüm sayfa "http:" ile erişir bu şekilde url (ve sorgu dizesi) bile php komut dosyası ulaşan değil "Yasak" hata mesajı neden. Bu daha az sunucu yükü sonuçlanır.
Ancak hiçbir "http" Sorgu dizesinde izin unutmayın. (Bir formu doldururken belki) web sitesi, bazı durumlarda bunu gerektirebilir olabilir.
BTW: Almanca okuyabilir: Ben de bu konuyla ilgili bir blog post var.