По умолчанию принято файл, который открывается веб-сервером при обращении к каталогу, называть именем «index». Если у файла такое название, то каталог откроется без указания файла в адресе.
http://my-site/
Если у файла, который должен открываться при обращении к каталогу, иное название, например forum.php, то его потребуется указать в адресе
http://my-site/forum.php
Переопределить имя файла «index» в директории на другое имя возможно в файле .htaccess при помощи директивы DirectoryIndex. Обычно так и поступают.
Что бы при обращении к каталогу открывался файл forum.php, напишите в файле .htaccess следующее правило:
DirectoryIndex forum.php
После размещения на сервере файла .htaccess с указанным правилом, по тому же адресу
http://my-site/
будет открываться файл forum.php
В тоже время, файл forum.php генерирует динамическую страницу, адрес которой состоит из названия файла и строки запроса с переменными QUERY_STRING. Удалив из адреса название файла с помощью директивы DirectoryIndex, получим адрес, состоящий только из строки запроса, начинающейся со знака «?».
Указанный способ обрезания адреса популярен, ввиду своей доступности, чему несказанно рад взломщик сайтов - теперь ему не нужно знать название файла, админ сайта услужливо убрал его из адреса. Неудивительно, что в логах сервера появляются строки типа этой
/?mod=ajax&inajax=yes&infloat=register&handlekey=register&ajaxmenu=1&action=checkusername&username=123123
Очевидно, что недостаточно одного переопределения имени файла с помощью директивы DirectoryIndex. Для того, что бы убрать строку запроса из адреса, в тот же файл .htaccess необходимо записать следующее правило
HTML Code:
## XSS attack
RewriteEngine on
RewriteBase /~quux/
RewriteCond %{QUERY_STRING} ^([A-Za-z0-9]+)(.*)$
RewriteRule (.*) / [F]
Эта запись означает, что, если в адресе будет присутствовать знак «?», после которого будет строка из любого сочетания букв и цифр, то сервер выдаст ошибку 403.
Кроме этого, указанное запись в файле .htaccess будет полезна не только в случае переопределения индексного файла, но и всегда, когда URL является динамическим, а строка запроса отсутствует в адресе.