Я просматривал журнал, созданный плагином WordPress под названием Bad Behavior, и в нем есть много записей с разных IP-адресов в разные промежутки времени в течение дня, которые запрашивают следующий URL-адрес:
POST www.example.com/index.php?pubkey=b13bdb8297326599cf86aj25274e6a0c&bvTime=1549500166&bvVersion=0.1&bvda8d06e4e4e6e8d06e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6 ] Та же часть URL-адреса -
/index.php?pubkey=
, тогда остальное отличается для других записей в журнале.
Что я хочу сделать, если это возможно, - заблокировать эти почтовые запросы через .h taccess
в корневом каталоге.
Во время исследования я нашел здесь следующий ответ: Ограничить доступ к index.php - Apache
Но поскольку я действительно не понимаю, как правильно строить директивы в .htaccess
, я не хочу добавлять туда что-то, что потенциально может заблокировать законный трафик или вызвать другие проблемы.
Также во время поиска я нашел эту информацию на https: // perishablepress.com/protect-post-requests/, но они предупреждают вас, что использование следующего правила может быть проблематичным, если веб-сайт не статичен или использует формы, которые используются на этом конкретном веб-сайте.
#deny all POST requests
<IfModule mod_rewrite.c>
RewriteCond %{REQUEST_METHOD} POST
RewriteRule .* - [F,L]
</IfModule>
Итак, с учетом сказанного, Я надеюсь, что здесь было добавлено достаточно информации, которая поможет кому-нибудь найти ответ на эту конкретную проблему.
Решение действительно очень похоже на вопрос , с которым вы связались .
Однако, один вопрос, который я бы задал, заключается в том, нужно ли вам специально ориентироваться на POST-запросы? Почему не любой запрос (GET или POST), который начинается/index.php?pubkey=
? Или это имеет какое-то другое значение в WordPress?
В этом случае, вы можете сделать что-то вроде следующего в верхней части вашего .htaccess
файла:
RewriteCond %{QUERY_STRING} ^pubkey=
RewriteRule ^index\.php$ - [F]
Нет необходимости в
обертке. Нет необходимости повторять директиву RewriteEngine
, так как она, несомненно, будет установлена позже в файле.
Для специфического назначения POST запросов можно добавить еще одно условие, как это было в вашем примере:
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{QUERY_STRING} ^pubkey=
RewriteRule ^index\.php$ - [F]
UPDATE:, оно не сработало, как я ожидал, так как я смог загрузить страницу, посетив
www. example.com/index.php?pubkey=
Это может произойти, если вышеуказанная директива находится не в том месте в файле .htaccess
и противоречит другим директивам. Она должна находиться в самом верху .htaccess
файл, перед любыми существующими директивами mod_rewrite.
После некоторых проб и ошибок это то, что полностью заблокировало меня, это работает, но я не понимаю почему, не могли бы Вы объяснить разницу между тем, что Вы дали мне и этим?
RewriteEngine On RewriteCond %{QUERY_STRING} (pubkey=.*) [NC] RewriteRule (.*) - [F,L]
Это гораздо более общее правило и блокирует гораздо больше, чем просто URL, указанный в вашем вопросе (возможно, слишком много). Эти директивы блокируют любой URL-путь, который содержит pubkey=
(нечувствительный к регистру) где-либо в строке запроса. Таким образом, он заблокирует следующие URL (в дополнение к URL, указанному выше):
example.com/foo/bar?pubkey=xyz
example.com/foo/bar/baz?abc=1&xyz=2&pubkey=
example.com/foo/bar/baz? def=2&xyz=3&PuBkEy=xyz
Эти директивы можно упростить:
RewriteCond %{QUERY_STRING} pubkey= [NC]
RewriteRule .* - [F]
Нет необходимости захватывать шаблон RewriteRule
pattern или CondPattern. Регекс pubkey=
совпадает с pubkey=.*
. Флаг L
не требуется при использовании флага F
. И, как упоминалось выше, нет необходимости повторять директиву RewriteEngine
или использовать
обертку.