入力をサニタイズするもう 1 つの方法は、許可された文字 (「/」、「.」、「:」など) のみが含まれるようにすることです。ただし、悪い文字にはブラックリストを使用しないでください。許可された文字にはホワイトリストを使用してください。
$page = preg_replace('[^a-zA-Z0-9]', '', $page);
... file_exists が続きます。
そうすれば、実行したいスクリプトのみが実行されるようにすることができます (たとえば、「.」は許可されていないため、「blabla.inc.php」は除外されます)。
注: これは一種の「ハック」です。ユーザーが「ホーム」を実行すると、「ホーム」ページが表示されるためです。禁止されている文字をすべて削除するだけです。あなたのページをかわいくしたい「賢者」を止めることを意図したものではありませんが、本当に悪いことをする人を止めるでしょう.
ところで: .htaccessファイルでできるもう 1 つのことは、明らかな攻撃の試みを防ぐことです。
RewriteEngine on
RewriteCond %{QUERY_STRING} http[:%] [NC]
RewriteRule .* /–http– [F,NC]
RewriteRule http: /–http– [F,NC]
そうすれば、"http:" url (およびクエリ文字列) を使用したすべてのページ アクセスで "Forbidden" エラー メッセージが表示され、php スクリプトに到達することさえありません。その結果、サーバーの負荷が軽減されます。
ただし、クエリ文字列には「http」を使用できないことに注意してください。あなたのウェブサイトは、場合によってはそれを必要とするかもしれません(フォームに記入するときなど)。
ところで: あなたがドイツ語を読めるなら: 私はそのトピックに関するブログ記事も持っています.