10 полезных твиков для безопасности WordPress

Сегодня будет раскрыта очень важная проблема – защищенность. Согласитесь это чуть ли не важнейший аспект ведения дел в сети и не только. Так что рекомендую не пропускать данную публикацию и в обязательном порядке ознакомиться с описанными ниже рекомендациями. И тогда вы сможете спать еще чуточку спокойнее ;) Все без шуток!

В этом посте мы разберем ровно 10 полезных советов о том, как повысить безопасность наших WordPress-блогов различными способами. Обещаю, что каждый, кому не безразлична судьба родного блога, найдет для себя что-то полезное, важное и интересное.

А теперь разрешите приступить к сегодняшней теме.

1. Убираем ненужную информацию с экрана

Проблема: Когда вы вдруг не можете залогиниться в своем блоге, WordPress выводит некоторую информацию, что об ошибке. Это конечно, хорошо, если вы забыли свой пароль, но так же может быть полезным для того, кто задумал взломать ваш блог! Так почему же не взять и не отключить вывод на экран сообщений об ошибках при входе?

Решение: Чтобы убрать сообщения об ошибке при входе, просто открываем файл functions.php в нашей теме оформления и вставляем в самом начале следующий код:

add_filter('login_errors',create_function('$a', "return null;"));

Сохраняем и идем проверять. Вот, теперь никаких ошибок ;)

Пояснение: Данный код просто добавляет петлю чтобы переписать функцию login_errors (). Теперь сообщение об ошибке будет выдавать чистый массив, так как функция, которую мы сделали, возвращает пустое значение.

2. Используем SSL

Проблема: Если вы беспокоитесь по поводу того, что данные могут быть перехвачены, то определенно надо начать использовать SSL. Если вдруг вы не знаете что это такое, то SSL – шифрованный протокол обеспечивающий безопасность передачи данных в сетях, таких как Интернет, например.

А знали ли вы что WP можно заставить использовать SSL? Не все хостинги разрешают использовать SSL, но будем надеяться, что ваш поддерживает ;)

Решение: Сперва проверьте, что сервер поддерживает SSL (проще всего спросить у админа, но скорее всего SSL у вас уже включен). Потом откройте файл wp-config.php расположенный в корне (куда установлен сам WordPress и где находится index.php) и вставьте следующий код:

define('FORCE_SSL_ADMIN', true);

Теперь сохраняем – вот и все готово!

Пояснение: Ну, тут ничего сложного. WordPress имеет кучу регулярных выражений для настройки. В данном же случае мы просто определили FORCE_SSL_ADMIN и присвоили значение true. И как результат движок начал использовать защищенное соединение SSL.

3. Используем .htaccess для защиты файла wp-config

Проблема: Как и любой другой человек, использующий WP для своих проектов, вы должны понимать всю важность файла wp-config.php. Этот файл содержит все данные необходимые для доступа к Базе Данных: имя пользователя, пароль, данные сервера и т.д. Защита wp-config.php крайне необходима, так что как на счет использования возможностей Apache?

Решение: Находим файл .htaccess расположенный в корне (там же где и index.php). На всякий случай создаем копию файла, а то мало ли что… Открываем файл и вставляем следующий код:

<files wp-config.php>
order allow,deny
deny from all
</files>

Пояснение: .htaccess мощный и лучший инструмент для предотвращения нежелательного доступа к определенным файлам на вашем сервере. В коде выше мы создали правило которое запрещает любые попытки доступа к файлу wp-config.php, так что никакие ацкие демоны не получат к нему доступ!

4. Черный список нежеланных пользователей и ботов

Проблема: Это правило работает как в сети так и в реальной жизни: если кто-нибудь, кто пристает к вам сегодня, скорее всего пристанет к вам и завтра. Знаете ли вы, сколько спам-ботов возвращаются к вам на блог по десять раз на дню, чтобы запостить свои гребаные комменатрии? Решение проблемы очень просто – закроем им доступ на блог!

Решение: Добавляем следующий код в наш .htaccess файл, расположенный в корне:

<Limit GET POST PUT>
order allow,deny
allow from all
deny from 123.456.789
</LIMIT>

Внимание! Не забудьте поменять 123.456.789 на реальный ip-адрес того, кого хотите заблокировать.

Пояснение: В очередной раз убеждаемся, что Apache мощный инструмент, который в данном случае позволяет нам разрешить доступ к блогу всем, кроме людей или ботов с указанными IP.




Для блокировки нескольких ip-адресов можно использовать следующую запись:

<Limit GET POST PUT>
order allow,deny
allow from all
deny from 123.456.789
deny from 93.121.788
deny from 223.956.789
deny from 128.456.780
</LIMIT>

5. Защищаем свой WP-блог от инъекций

Проблема: Защита динамического сайта особенно важна. Многие разработчики защищают запросы GET и POST, но иногда этого бывает недостаточно. Мы тоже постараемся защитить свой блог от инъекций и любых попыток изменить PHP переменные GLOBALS и _REQUEST.

Решение: Следующий код будет блокировать инъекции и попытки менять переменные. Следует вставить его в файл .htaccess:

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
RewriteRule ^(.*)$ index.php [F,L]

Пояснение: Использую возможности .htaccess мы можем проверять запросы. То что мы сделали, проверяет, содержит ли запрос <script> и пытается ли он изменить значение переменных GLOBALS и _REQUEST. Если встречается что-либо подобное, запрос блокируется и выдается 403 ошибка в браузере.

6. Боремся с парсерами и грабберами.

Проблема: Если ваш блог более или менее известен, люди без сомнения попытаются использовать ваш контент на своих сайтах без нашего на то согласия. И одна из бОльших проблем при этом – использование ваших картинок, что влечет за собой увеличение трафика и нагрузки на сервер.

Решение: Для защиты блога против этих злых действий необходимо добавить код в файл .htaccess. Повторюсь – не забывайте делать резервную копию файла.

RewriteEngine On
#Replace ?myblog\.ru/ with your blog url
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?myblog\.ru/ [NC]
RewriteCond %{HTTP_REFERER} !^$
#Replace /images/nohotlink.jpg with your "don't hotlink" image url
RewriteRule .*\.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpg [L]

После вышеописанный действий, только ваш веб-сервер сможет использовать ссылки на ваши изображения, или, что еще более правильно, тот, кто решит использовать изображения с вашего сервера будет вынужден сперва сохранить их, а потом загрузить на свой сервер, что усложняет воровство и увеличивает время.

На сайтах, которые будут ссылаться на ваши картинки, автоматически будет показано изображение nohotlink.jpg. Будьте внимательны, необходимо заранее подготовить данную картинку, чтобы она отображалась на сайтах негодяев =)




Пояснение: С помощью данного кода, первое, что мы сделали это проверку реферрера (referrer) на соответствие URL’у нашего блога и что он не пустой. Если это не так и запрашиваемый файл имеет расширение JPG, GIF, BMP или PNG, вместо него отобразится картинка-пустышка.

7. Создаем плагин для защиты нашего блога от вредоносных URL-запросов

Проблема: Хакеры и прочие злыдни часто используют всякие недобрые запросы для поиска узких мест и атаки. WordPress имеет неплохую изначальную защиту, но совершенству нет предела!

Решение: Создаем текстовый файл и добавляем в него следующий код. Сохраняем файл под именем blockbadqueries.php. После этого загружаем его в директорию wp-content/plugins и активируем наш плагин через админку как и любой другой. Теперь наш блог защищен от вредоносных запросов.

<?php
/*
Plugin Name: Block Bad Queries
Plugin URI: http://perishablepress.com/press/2009/12/22/protect-wordpress-against-malicious-url-requests/
Description: Protect WordPress Against Malicious URL Requests
Author URI: http://perishablepress.com/
Author: Perishable Press
Version: 1.0
*/
 
global $user_ID; 
 
if($user_ID) {
  if(!current_user_can('level_10')) {
    if (strlen($_SERVER['REQUEST_URI']) > 255 ||
      strpos($_SERVER['REQUEST_URI'], "eval(") ||
      strpos($_SERVER['REQUEST_URI'], "CONCAT") ||
      strpos($_SERVER['REQUEST_URI'], "UNION+SELECT") ||
      strpos($_SERVER['REQUEST_URI'], "base64")) {
        @header("HTTP/1.1 414 Request-URI Too Long");
 @header("Status: 414 Request-URI Too Long");
 @header("Connection: Close");
 @exit;
    }
  }
}
?>

Пояснение: Данный код достаточно прост. Он проверяет чрезмерно длинные запросы (больше чем 255 символов) и проверяет присутствие в них eval или base64 php-функций в URI. Если выполняется одно из условий, плагин отправляет 414 ошибку (кто не знает: 414 Request-URI Too Long (Запрашиваемый URI слишком длинный)).

8. Удаляем номер версии движка…я серьезно ;)

Проблема: Как вы, наверное, знаете, WordPress автоматически отображает текущую версию движка, которую вы используете. Это небезопасно если вы оперативно не обновляетесь до актуальной версии (хоть это и строго рекомендуется разработчиками, но признайтесь, мы все этим грешим). Вот поэтому стоит усложнить хакерам жизнь!

Решение: Добавьте следующую строку в файл functions.php вашей темы оформления. Сохраняем, обновляем страницу и вуаля – нет больше номера версии.

remove_action('wp_head', 'wp_generator');

9. Изменяем стандартное имя администратора «admin»

Проблема: Брутфорс – один из простейших способов сломать пароль. Метод просто: пробовать использовать случайные пароли так много раз, сколько возможно до тех пор, пока правильный не будет найден. Для брутфорса используются словари дающие множество различных комбинаций паролей.

Но зная логин определенно намного легче подобрать правильную комбинацию логин-пароль. Вот поэтому и надо менять стандартный «admin» на что-нибудь посложнее.

Кстати, WordPress 3.0 позволяет менять имя через админку. Следовательно, этот пункт важен, если вы используете старую версию WP и старый «admin» аккаунт.

Решение: Достаточно просто запустить следующий SQL запрос для вашей БД, например через phpMyAdmin:

UPDATE wp_users SET user_login = 'NewUsername' WHERE user_login = 'Admin';

10. Предотвращаем прямой просмотр директорий

Проблема: По умолчанию большинство хостингов позволяют листинг директорий. Так, например, если ввести blogname.ru/wp-includes в браузере можно увидеть файлы директории. Это потенциальный риск опасности.

Решение: Просто добавьте следующую строчку в конфигурацию Apache или в .htaccess файл:

Options -Indexes

Пояснение: Имейте ввиду, что это не тоже самое, что добавление Disallow: /wp* в файл robots.txt. Это не запретит индексацию директории, а запретит юзерам просмотр.

alaev.info

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.