Использование .htaccess запрещает возвращение 302, а не 403 запрещено

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

Я знаю, что там есть плагины WordPress, чтобы предотвратить грубую силу, но предпочли бы простой метод .htaccess, который в значительной степени блокирует все попытки с помощью файла wp-login.php.

Итак, я придумал этот простой код, который заблокирует других пользователей, кроме меня или, по крайней мере, тех, кто не использует моего интернет-провайдера.

<FilesMatch "wp-login.php">
    deny from all
    allow from .isp.example.com
</FilesMatch>

Код работает отлично, но я бы ожидал увидеть 403 запрещенных, но Firebug показывает 302 временно перемещенный, возврат состояния заголовка выглядит следующим образом:

HTTP/1.1 302 Moved Temporarily    
Date: Thu, 31 Dec 2015 00:24:15 GMT    
Server: Apache    
X-Powered-By: PHP/5.3.29    
Expires: Wed, 11 Jan 1984 05:00:00 GMT    
Cache-Control: no-cache, must-revalidate, max-age=0    
Pragma: no-cache    
Link: <http://www.example.com/wp-json/>; rel="https://api.w.org/"    
Location: http://www.example.com/wp-login.php    
Vary: Accept-Encoding    
Content-Type: text/html; charset=UTF-8    
Transfer-Encoding: chunked

В то время как это, кажется, останавливает грубые атаки, это вызывает ненужные попытки множественного доступа на сервере, например, вот что выглядит FireBug:

123

За исключением использования перенаправления, а не отрицания, есть ли что-нибудь, что я могу сделать с этим?

  • Как я могу вернуть 403 с deny (не перенаправлять)
  • Это нормально? или я должен связаться с веб-хостом?
3 голоса | спросил Simon Hayter 31 ThuEurope/Moscow2015-12-31T03:53:12+03:00Europe/Moscow12bEurope/MoscowThu, 31 Dec 2015 03:53:12 +0300 2015, 03:53:12

3 ответа


2

Попробуйте это, если у вас установлен модуль перезаписи:

RewriteEngine On
RewriteCond %{REQUEST_URI} ^(.*)wp-login.php$
RewriteCond %{REMOTE_ADDR} !^xxx\.xxx\.xxx\.xxx$
RewriteRule ^(.*)$ - [R=403,L]

замените xxx на каждый октет вашего IP-адреса. Например, если ваш IP-адрес равен 111.222.333.444, замените

RewriteCond %{REMOTE_ADDR} !^xxx\.xxx\.xxx\.xxx$

с

RewriteCond %{REMOTE_ADDR} !^111\.222\.333\.444$

Если это не сработает, используйте это:

RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^xxx\.xxx\.xxx\.xxx$
RewriteRule ^(.*)wp-login.php$ - [R=403,L]

Хорошая вещь с этими сценариями заключается в том, что правила также применяются к любому URL-адресу, который заканчивается на wp-login.php, который я очень сомневаюсь в 99% веб-сайтов захотят сделать доступными для широкой публики.

Я также предлагаю использовать IP-адреса вместо имен хостов, потому что в конечном итоге имя хоста должно будет в конечном итоге разрешить на ip-адрес, а так как обновление .htaccess не требует времени для распознавания изменений apache, я бы предположил, что каждый раз, когда вы войдите в свой интернет-провайдер, обратите внимание на свой IP-адрес и используйте его в приведенном выше сценарии, чтобы только ваш компьютер имел доступ к сценарию wp-login.php.

ответил Mike 21 Jam1000000amThu, 21 Jan 2016 00:53:02 +030016 2016, 00:53:02
1

Просто добавьте что-то к этому для других, которые могут испытывать ту же проблему. Я получал ту же серию из 5 последовательных ошибок 302, независимо от того, использовал ли я:

<Files wp-login.php>
order deny,allow
deny from all
allow from xxx.xxx.xxx.xxx
</Files>

или используя правило перезаписи, указанное выше в моем файле .htaccess.

Причина этого в том, что мне не удалось создать страницу «403.shtml» Я создал страницу с помощью cpanel и теперь получаю одиночную ошибку «403», когда отрицаемый IP-адрес пытается получить доступ к файлу ... Как идиот, я предположил, что apache будет генерировать страницу 403 по умолчанию который он делает правильно на сайтах, отличных от Wordpress, - но кажется, что Wordpress пытается обработать страницу с ошибкой - создание 403.shtml силы wordpress, чтобы позволить .htaccess выполнять свою работу ...

ответил swagIT 5 72017vEurope/Moscow11bEurope/MoscowSun, 05 Nov 2017 09:13:40 +0300 2017, 09:13:40
0
  

Это нормально? или я должен связаться с веб-хостом?

Нет, это не нормально.

X-Powered-By: PHP/5.3.29
:
Link: <http://www.example.com/wp-json/>; rel="https://api.w.org/"  

Но отображаемый заголовок HTTP-ответа прошел через PHP (WordPress?), а не только Apache - как вы ожидали бы с помощью raw deny from .... Этот заголовок Link: предполагает, что WP как-то ответственен.

Есть ли какой-то конфликт? Или можно определить пользовательский (т. Е. PHP) 403 ErrorDocument и переопределить ожидаемый ответ? Или запрос маршрутизируется через WP /какой URL-адрес запрашивается?

ответил MrWhite 8 +03002016-10-08T00:39:49+03:00312016bEurope/MoscowSat, 08 Oct 2016 00:39:49 +0300 2016, 00:39:49

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

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132