Сайты в Рунете растут как грибы после дождя. Для хакеров каждый сайт потенциально полезен: если получить к нему доступ, то можно как минимум сапо-ссылок разместить. Доступ хакер получает обычно из-за «дыр» в движке сайта или по причине установки простого пароля для стандартной учётной записи (например, «admin»). Чем выше SEO-показатели сайта, тем интересней он хакеру, тем активнее атака на сайт. Скажем, подбор пароля может идти сутками, при этом на сайт каждую секунду будет поступать несколько запросов с проверкой разных паролей, и хостинг при этом будет жутко нагружен. Даже если атака не будет успешной — хакеров тьма, и покупать ради них дорогущие сервера смысла нет. Значит, надо свести к минимуму воздействие таких атак на работу сайтов. Предлагаю это сделать через htaccess.

Предложенный способ подходит конкретно для движка WordPress, но в принципе может быть заточен под любой движок. Для использования способа на другой CMS надо знать некоторые технические особенности движка. Если вы вообще впервые сталкиваетесь с понятием «движок», можете здесь [1] почитать о разных CMS и различиях между ними. Я для защиты через htaccess конкретно использую особенность WP логинить пользователей по адресу /wp-login.php, атаки на который производятся в 99,9% случаев.

Для начала придумайте какой-нибудь секретный адрес на вашем сайте. Например: /vasya-007.php — создайте соответствующий файл в корне сайта и впишите в него такие простые строки:

<?
SetCookie("vasya_007_x_data","1");
header('Location: /wp-login.php');
?>

Особое внимание на vasya_007_x_data — это тоже секретная информация, впишите вместо этой строки свою (использовать можно английские буквы, цифры, знак подчёркивания). Как вы поняли, при посещении секретного адреса в ваш браузер будет установлена секретная кука и произойдёт редирект на страницу входа WP. Теперь правим файл .htaccess:

# Блокировка wp-login.php
RewriteCond %{REQUEST_URI} ^/wp-login.php$
RewriteCond %{HTTP_COOKIE} !^.*vasya_007_x_data
RewriteRule . - [L,F]

Где-то вначале файла пропишем эти строки (не забываем исправить свою секретную строчку). Теперь запросы к wp-login.php просто не будут обрабатываться, если клиент обратиться без секретной куки. А чтобы вам получить секретную куку, надо обратиться по адресу ваш-сайт/vasya-007.php (это в моём примере: надеюсь, вы придумаете свой), который вас отправит на страницу входа в WP. Тем самым, мы избавили хостинг от лишней нагрузки и сделали админку сайта более защищённой.

Для WP можно вообще заблокировать все POST запросы, которые исходят не от вас, не от вашего сервера и не от комментаторов. добавляем для этого такие строки в .htaccess:

# Блокировка POST-запросов
RewriteCond %{THE_REQUEST} ^POST
RewriteCond %{REMOTE_ADDR} !^0.1.2.3$
RewriteCond %{HTTP_COOKIE} !^.*vasya_007_x_data
RewriteCond %{REQUEST_URI} !^/wp-comments-post.php$
RewriteRule . - [L,F]

Где 0.1.2.3 — адрес вашего сервера. И помните, что правка файла .htaccess неумелыми руками может стать причиной неработоспособности сайта.

Запись опубликована 22 августа 2013 года. Пост окончен, но в рубрике «Web-кодинг» есть не менее интересные посты:

Подписка на RSS канал блога RSS подписка (как это?) поможет вам не пропустить ничего интересного на этом блоге.