Правило htaccess для защиты от вредоносных почтовых запросов к WordPress index.php? Pubkey =

Я просматривал журнал, созданный плагином 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>

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

1
задан 7 February 2019 в 14:01
1 ответ

Решение действительно очень похоже на вопрос , с которым вы связались .

Однако, один вопрос, который я бы задал, заключается в том, нужно ли вам специально ориентироваться на 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 или использовать обертку.

.
0
ответ дан 4 December 2019 в 03:17

Теги

Похожие вопросы