2016-08-11 2 views
-1

У меня есть следующий код в моем файле .htaccess для блокировки запросов к файлам PHP и отображения файла 404.php.Перезапись файлов PHP в подкаталогах

RewriteCond %{REQUEST_URI} !(index|backup).php 
RewriteCond %{REQUEST_URI} !^\/(dir1|dir1)\/ 
RewriteCond %{REQUEST_URI} !404.php 
RewriteCond %{REQUEST_URI} .*\.php 
RewriteRule .* 404.php [L] 

Это блокирует запросы на все PHP файлы, за исключением index.php, backup.php и любые файлы в dir1 и dir2. Это работает для запросов в корне:

http://www.example.com/some-file.php 
http://www.example.com/another-file.php 

Но это не работает для файлов в подкаталогах:

http://www.example.com/sub/some-file.php 
http://www.example.com/sub/another-file.php 

я должен сказать, что подкаталог «суб» на самом деле не существовать. Запросы поступают от автоматических сканеров, которые ищут дыры на сайте. Я переписываю запросы на 404.php, так как этот файл не загружает базу данных или какое-либо приложение. Если я этого не сделаю, вместо этого загружается полное приложение 404, которое продолжает сбой MySQL, поскольку я получаю 100 запросов этих запросов в минуту (несколько раз в день).

Мой вопрос в том, как я могу изменить код для работы в подкаталогах? Я думал, что REQUEST_URI включает полный подкаталог в нем, поэтому код должен работать так, как есть?

ответ

-1

Вы могли бы иметь отдельный RewriteRule, что просто запрещает доступ к sub, поставить это перед вашими другими правилами, и это будет только 403 запроса и прекратить обработку:

RewriteCond %{REQUEST_URI} ^/(sub.*|othersub.*)$ 
RewriteRule .* - [F] 

Я бы держать отдельный список, как это отрицайте, потому что люди, которые ловят эксплойты, попадают в категорию 403, тогда как настоящая ошибка в поисках потенциально действительного URL-адреса больше 404.

+0

Это не сработает, поскольку каталоги действительно не существуют и могут быть чем-то таким, как они запрашиваются с помощью автоматических сканеров эксплойтов. У меня нет определенного списка dirs для блокировки. Для меня не проблема блокировать все .php-файлы, так как единственным действительным файлом PHP на сервере является index.php, который разрешен с использованием этого правила. –

Смежные вопросы