Еще один способ очистки входных данных - убедиться, что в нем присутствуют только разрешенные символы (без "/", ".", ":", ...). Однако не используйте черный список для плохих символов, а белый список для разрешенных символов:
$page = preg_replace('[^a-zA-Z0-9]', '', $page);
... сопровождаемый file_exists.
Таким образом, вы можете убедиться, что выполняются только те сценарии, которые вы хотите выполнить (например, это исключило бы «blabla.inc.php», потому что «.» Не разрешено).
Примечание: это своего рода «взлом», потому что тогда пользователь может выполнить «h.o.m.e», и он выдаст «домашнюю» страницу, потому что все, что он делает - это удаляет все запрещенные символы. Оно не предназначено для того, чтобы помешать «умным людям», которые хотят подшучивать над вашей страницей, но это остановит людей, которые делают очень плохих вещей.
Кстати: еще одна вещь, которую вы можете сделать в файле .htaccess , - предотвратить явные попытки атаки:
RewriteEngine on
RewriteCond %{QUERY_STRING} http[:%] [NC]
RewriteRule .* /–http– [F,NC]
RewriteRule http: /–http– [F,NC]
Таким образом, все обращения к странице с URL-адресом «http:» (и строкой запроса) приводят к сообщению об ошибке «Запрещено», даже не доходя до сценария php. Это приводит к снижению нагрузки на сервер.
Однако имейте в виду, что в строке запроса «http» не допускается. Ваш веб-сайт МОЖЕТ потребовать этого в некоторых случаях (возможно, при заполнении формы).
Кстати: если вы можете читать по-немецки: у меня также есть сообщение в блоге на эту тему.