mod_rewrite Блокирует почтовые запросы агента пользователя с пустыми ссылочными строками

#wordpress #.htaccess #mod-rewrite #post

#wordpress #.htaccess #mod-переписать #Публикация

Вопрос:

Мой сайт WordPress завален запросами post. Количество запросов приближается к 200 000 в день.

Вот пример журнала доступа apache:

 218.75.48.179 - - [24/Jun/2014:13:16:13 -0700] "POST / HTTP/1.1" 403 - "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
195.226.235.101 - - [24/Jun/2014:13:16:13 -0700] "POST / HTTP/1.1" 403 - "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
186.116.184.32 - - [24/Jun/2014:13:16:14 -0700] "POST / HTTP/1.1" 403 - "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
95.43.217.197 - - [24/Jun/2014:13:16:14 -0700] "POST / HTTP/1.1" 403 - "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
110.168.188.207 - - [24/Jun/2014:13:16:14 -0700] "POST / HTTP/1.1" 403 - "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
113.161.194.225 - - [24/Jun/2014:13:16:14 -0700] "POST / HTTP/1.1" 403 - "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
80.9.11.226 - - [24/Jun/2014:13:16:14 -0700] "POST / HTTP/1.1" 403 - "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
  

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

Вот мой файл .htaccess:

 ErrorDocument 403 "403 Error"

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{HTTP_REFERER} ^$
RewriteCond %{HTTP_USER_AGENT} "^Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
RewriteRule ^.* 403 [F,L]

RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
  

Ответ №1:

В настоящее время я отказываю во всем трафике, кроме моего IP-адреса.

Вы не должны использовать %{HTTP_REFERER} для этого. %{REMOTE_ADDR} Для этого вам нужно использовать:

 RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REMOTE_ADDR} !=11.22.33.44
RewriteCond %{HTTP_USER_AGENT} "^Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"
RewriteRule ^.* 403 [F,L]
  

Измените 11.22.33.44 свой фактический IP-адрес.

Комментарии:

1. Извините. Я думаю, что мой оригинальный пост может быть немного запутанным. Я удалю предложение «В настоящее время я запрещаю весь трафик, кроме моего IP-адреса», поскольку эта часть файла htaccess не отображается выше и находится там только до тех пор, пока раздел mod_rewrite не заработает должным образом.

2. Но вы все равно можете использовать %{REMOTE_ADDR} , чтобы разрешить только вашему компьютеру делать POST. Это намного безопаснее, чем слабая %{REMOTE_ADDR} проверка.

3. Ха, я раньше не видел != . Круто. 🙂

4. Разве это не помешает законным пользователям отправлять контактную форму?

5. До сих пор вы не указали требование, чтобы у вас также были законные формы POST. В любом случае, как вы думаете RewriteCond %{HTTP_REFERER} ^$ , это помогло бы вам, поскольку клиенты могут отправлять любые непустые ссылки, чтобы обойти это.