MAMP .htaccess LimitExcept не блокирует запрос GET - PullRequest
1 голос
/ 05 августа 2020

Я изучаю Apache директив в .htaccess и тестирую настройки безопасности. Я узнал о директиве LimitExcept.

У меня есть каталог wordpress на localhost и .htaccess внутри, поэтому директивы влияют на все подкаталоги, такие как файлы моего проекта.

Вот мой код в .htaccess :

Options All -Indexes
FileEtag None

<files wp-config.php>
order allow,deny
deny from all
</files>

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{QUERY_STRING} ^author=([0-9]*)
RewriteRule .* - [F]
</IfModule>

<LimitExcept POST HEAD>
Order Deny,Allow
Deny from all
</LimitExcept>

#<IfModule mod_rewrite.c>
#RewriteEngine on
#RewriteCond %{REQUEST_METHOD} ^GET
#RewriteRule .* - [R=400]
#</IfModule>

Меня беспокоит то, что используемая мной директива LimitExcept не блокирует доступ к моей домашней странице. Это похоже на то, что запрос GET разрешен.

Мне нужно добавить или использовать вместо директив Rewrite, чтобы заблокировать мой запрос GET.

Я также обнаружил, что если я оставлю метод HEAD, из текущей директивы LimitExcept, то при запросе моей домашней страницы будет правильно возвращен ответ Запрещенный запрос.

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

Так что, я что-то пропускаю или что-то не так с директивой LimitExcept?

1 Ответ

0 голосов
/ 05 августа 2020
<LimitExcept POST HEAD>
Order Deny,Allow
Deny from all
</LimitExcept>

Кажется, что HEAD и GET внутренне связаны. Заблокируйте одно, а вы заблокируете другое. Из документы для <limit> (который также охватывает <LimitExcept>):

Если используется GET, он также ограничивает запросы HEAD.

В моих тестах верно и обратное ... если вы ограничиваете HEAD, то GET также ограничивается.

Итак, вернемся к вашей директиве <LimitExcept POST HEAD> ... создав исключение для HEAD, он казалось бы, вы также создаете исключение для GET. Вам нужно удалить HEAD из директивы. (Предполагая, что вы используете Apache 2.4, вы также должны использовать директиву Require, а не более старые Order / Deny директивы.) Например:

<LimitExcept POST>
Require all denied
</LimitExcept>
...