1

Topic: Защита WordPress от взлома

Эта тема о том, как защитить сайт от взлома. Это достаточно важная тема, которую необходимо обязательно изучить и применить на своем веб-ресурсе. Каждый день нехорошие люди (хакеры) делают попытки взлома миллиона сайтов. Статистика говорит, что 30% из этих попыток оканчиваются удачей.

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

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

Причины, почему хакеры хотят взломать ваш сайт?
Внедрить ссылки на другой сайт (платные ссылки). Вы даже будете не знать, что с вашего сайта идет продажа ссылок.
Угнать ваш сайт из-за трафика.
Из-за содержимого на сайте.
Получить адреса всех зарегистрированных пользователей.
Использовать ваш сервер для рассылки спама или хранения файлов нелегального характера.
Банальная человеческая зависть. Если ваш сайт достаточно раскручен, конкурент может специально заказать взлом.
И конечно же, просто для удовольствия.
Вы до сих пор думаете, что ваш сайт никому не нужен?

1. Создать надежный пароль.
Это самый простой, но действенный способ для обеспечения безопасности веб-ресурса. Многие указывают не сложный пароль специально, чтобы его ввод не занимал слишком много времени. Каждый из ваших сайтов должен иметь разный пароль. Постарайтесь, чтобы пароль был длиной не менее 15 символов и состоял из букв, цифр и знаков.  Пароль такого вида не подойдет, его ломают в два счета:

пароль
password123
привет
hello123
QWERTY
QWERTYUIOP
твое имя
название компании.

В большинстве случаев люди, которые хотят взломать ваш сайт, на самом деле не люди, это роботы. Эти боты идут на страницу входа в систему, устанавливают имя администратора и начинают подбор с самых простых комбинаций. Ваш пароль — это первая и самая важная ступень в защите от хакеров.  Не храните файл с паролями на электронной почте или на компьютере. Самое надежное место — это ваша голова и обычный блокнот.

2. Обновление WordPress.
Когда речь доходит до обновления WordPress, многие люди попросту не делают это. Либо не хотят тратить время, либо боятся несовместимости некоторых плагинов с обновленным движком.
Делаем резервную копию (Бэкап) всех файлов и обновляемся до последней версии. Обновление выпускаются не для того, чтобы привлечь внимание пользователей. В новой версии, как правило, исправляются ошибки, закрываются дыры в безопасности, появляются новые функции.  Также следите за обновлением плагинов и темы.

3. Выбор хостинга.
Если вы создаете серьезный проект для долгосрочного использования, то никогда не используйте бесплатный хостинг.  Все бесплатное — очень плохого качества. Взломать такой сервер не составит большого труда. В своем хостинг — провайдере Beget я полностью уверен. Почитайте статью «Как я гонялся за вирусом на блоге» и убедитесь сами. Если вы выбираете виртуальный хостинг, то риск возрастает. Как правило, на таком хостинге располагается не одна сотня таких же сайтов и если хотя бы один ломают, то и ваш ресурс попадает в зону риска.  Поэтому нужно выбирать выделенный сервер. Он, конечно, стоит дороже, но зато много привилегий, в том числе и в плане безопасности.

4. Делаем защиту от частого ввода пароля.
Вход в систему WordPress устроен так, что количество попыток ввода пароля не ограничен. Этим и пользуются хакеры. Для защиты от частого ввода пароля будем использовать плагин Login Lockdown. Он устроен так, что если в течение пяти минут указать пароль неправильно три раза, то IP адрес с которого шла атака блокируется. Время блокировки можно указать в настройках — от одного часа до суток. Этот плагин отлично справляется с подобным родом «переборщиков». Где скачать и как установить плагин, читаем вот здесь.

5. Защищаем свой блог с помощью плагинов WP Security Scan и Anti XSS Attack.
WP Security Scan еще один нужный плагин, который проверяет ваш блог на наличие уязвимостей. Если такие присутствуют, он дает полное описание вредоносных программ.
Anti XSS Attack этот плагин просто устанавливается и активируется. Никаких настроек нет. Плагин блокирует XSS атаки, которые очень часто используют хакеры для взлома сайта.

6. Проверка сайта на наличие открытых директорий.
Необходимо выполнить в браузере пару команд.
В адресной строке прописываем по очереди вот эти адреса.

1. http://Ваш домен/wp-content/
2. http://Ваш домен/wp-content/plugins/

Если при переходе на новую страницу, вы увидите файлы и папки вашего сайта, это значит, что директории у вас открыты. Зная содержание сайта, хакерам не составит труда увести ресурс. Для того, чтобы закрыть файлы и папки от просмотра, нужно создать пустой файл index.php и поместить его в обе директории. Вообще, при установке WordPress данные файлы должны присутствовать, но мало ли что. Для большей надежности откройте файл htaccess и поместите туда следующий код:

Options All -Indexes

Все! Теперь при вводе таких команд у вас открывается чистая страница.

7. Удаляем не нужные файлы Readme.html и License.txt.
Бывает такое, что для взлома сайта хакеру необходимо знать только текущую версию движка WordPress. Файлы Readme.html и License.txt для вас и вашего блога не представляют ценности, а для нехороших людей — это куча полезной информации. Удаляем эти файлы. Также не лишним будет удалить в файле header.php строчку

<meta name=”generator” content=”WordPress <?php bloginfo (’version’); ?>” />

в которой указывается версия движка.
Второй вариант.
Для всех любителей всяких нестандартных тем или кто не нашел данную строчку в файле header.php, есть другой отличный вариант решить проблему показа версии WordPress в исходном коде сайта. Необходимо в файл functions.php вашей темы добавить следующий код:

remove_action('wp_head', 'wp_generator');

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

8. Убираем выскакивающее окно, которое уведомляет о неправильном пароле.
Убирайте это окно срочно. Объясню почему. Допустим, попал хакер на страницу входа в систему и начинает перебирать данные, а ему бац окошко «не правильно введен пароль». Он понимает, что логин он угадал и запускает бота, который в автоматическом режиме начинает перебор пароля. Если уберем окошко, вот тут сложней ему будет. Как видно на скриншоте логин я ввел правильно, но не угадал с пароль.пароль удаляем
Чтобы его отключить, открываем для редактирования файл funcions.php и прописываем следующую строчку.

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

Теперь при вводе данных хакер не будет знать, что именно не правильно, окна же нет. Отлично работает.

9. Меняем стандартный логин.
Уверяю вас, что у большинства владельцев сайтов логин входа в систему так и остался стандартным «admin». Об этом знаю я, знаете вы и знают те самые нехорошие люди. Зная логин, они действуют по старой схеме. Менять будем через phpMyAdmin прямо в нашей базе данных.
Идем в панель управления на хостинге. Защищаем сайт от взломаи открываем базу данных. Немного погуляем по таблице до пункта wp_users, далее вкладка «Обзор», в которой находится строчка admin.защита от взлома сайтаНажимаем на карандашик и меняем логин администратора на более сложный.  Там же в таблице можно поменять и пароль. Ищем user_pass, в строке  удаляем все содержимое и прописываем новый пароль.Защита сайта  Если все сделали, можно выходить.

10. Редактируем файлы function.php и search.php.
Немного изменив эти файлы, вы закроете доступ и возможность хакерам гулять по вашему серверу с целью поиска полезной информации.
Открываем файл function.php,  идем в самый конец и прописываем следующую строчку.

<!--?php remove_action (’wp_head’, ‘wp_generator’); ?-->

Далее открываем для редактирования файл search.php
Находите строчку

<!--?php echo $_SERVER ['PHP_SELF']; ?-->

Меняем на:

<!--?php bloginfo (’home’); ?-->

С этим тоже разобрались.

11. Очистите свой сайт от ненужных вещей.
Наведите порядок в своей WordPress панели. Удалите все плагины, которые вы не используете в своей работе. Также избавьтесь от сайтов, которые забросили и долго их не обновляете. Со временем на таких сайтах могут появляться дыры в безопасности, что существенно угрожает вашим действующим сайтам.

12. Программа FileZilla.
Никогда не храните пароли в программе FileZilla, потому что они не шифруются. Если у вас когда-либо на компьютере заведется вирус «Сборщик паролей», то все пароли он передаст своему хозяину. Периодически проверяйте ваш ПК на вирусы, используя антивирус с актуальными базам.

Настройка резервной копии.
В случае если ваш сайт взломали или вы что сделали неправильно, имея резервную копию, вы без труда сможете быстро восстановить работу сайта и принять меры по усилению безопасности. Я использую плагин WordPress Database Backup, который отправляет мне каждый день на почту архив базы данных. Если вы используете другое решение, то обязательно убедитесь, что предыдущие версии не удаляются и у вас есть несколько копий.
Заключение.

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

2 (edited by 2015.10.11 04:55)

Re: Защита WordPress от взлома

Защищаем Wordpress от XSS-инъекций

В чём проблема?
Программисты всегда стараются защитить GET- и POST- запросы, однако, иногда этого недостаточно. Необходимо защитить блог от XSS-инъекций и попыток модификации переменных GLOBALS и _REQUEST.

Что делаем?
Этот код блокирует использование XSS-инъекций и попытки модифицировать переменные 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]

Код позволяет проверять все запросы. Если запрос содержит тег <script> или попытку модифицировать значение переменных GLOBALS и _REQUEST, он просто блокирует его и выдаёт пользователю 403-ю ошибку.

Убираем показ лишней информации

В чём проблема?
Если при попытке зайти в админку Wordpress’a вы ошибётесь с логином или паролем, вежливый движок скажет вам об этом. Ну а зачем злоумышленнику знать, что пароль, который он пытается подобрать – неверен? Давайте просто уберём вывод этой информации и чуток запутаем его.

Что делаем?
Открываем functions.php, лежащий в папке с активной темой нашего блога (wp-content/themes/название-вашей-темы/) и добавляем следующий код:

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

С помощью этого хука мы переписываем стандартную функцию login_errors(). В результате этого, в случае, когда введены неправильный логин или пароль, никакой информации, объясняющей ситуацию не появится — то, что нам нужно.

3

Re: Защита WordPress от взлома

Принудительное использование SSL

В чём проблема?
Если вы хотите, чтобы передаваемая вами информация была защищена, вам необходимо использовать SSL—протокол, обеспечивающий целостность и конфиденциальность обмена данными. В Wordpress’e это сделать проще простого.

Что делаем?
Прежде всего узнаём, есть ли возможность у вашего провайдера использовать SSL. Если да, то открываем файл wp-config.php (обитающий в корне сайта) и добавляем следующую строку:

define('FORCE_SSL_ADMIN', true);

Wordpress использует множество констант и FORCE_SSL_ADMIN всего лишь одна из них. Эта константа включает принудительное использование SSL при заходе в панель администратора.

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

В чём проблема?
wp-config.php содержит все данные, необходимые для подключения к серверу MySQL и базе данных. Защита этого файла – одна из самых главных задач.

Что делаем?
Находим файл .htaccess в корне нашего сайта и добавляем следующие строки:

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

Мы просто запрещаем доступ к этому файлу кому бы то ни было. Теперь уж точно ни один бот не сможет и близко подойти к этому файлу.

4

Re: Защита WordPress от взлома

Скрываем версию Wordpress'a

В чём проблема?
Wordpress автоматически вставляет номер своей версии в исходный код страниц. К сожалению, не всегда удаётся вовремя обновлять движок. А это означает, что зная какая у вас версия Wordpress’a со всеми её брешами и слабыми местами, злоумышленник может очень-очень огорчить вас. Что делаем? Правильно, убираем вывод версии.

Что делаем?
Снова открываем functions.php, лежащий в папке с активной темой нашего блога (wp-content/themes/название-вашей-темы/) и добавляем туда этот код

remove_action('wp_head', 'wp_generator');

Хуки Wordpress'a позволяют легко заменять одну функцию на другую. Именно этим мы сейчас и воспользовались – мы просто запретили вывод информации о версии нашего движка.

+ как справедливо указал пользователь rOOse, необходимо также удалить файл readme.html, находящийся в корне сайта. В нём тоже содержится информация о текущей версии Wordpress'a.

Баним спамеров и ботов

В чём проблема?
Надоедливые постеры и спамеры. Решение – запретить им доступ к сайту по IP. Конечно, это не защитит от спам-скриптов, постоянно меняющих прокси, но немного облегчить жизнь вполне может.

Что делаем?
Вставьте этот код в файл .htaccess. Просто поменяйте адрес 123.456.789 на IP того редиски нехорошего человека, который вас достаёт и всё — он забанен всерьёз и надолго.

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

И снова нам на помощь приходит apache. Посредством файла .htaccess мы запрещаем доступ к сайтe пользователям с конкретным IP. Нужно забанить ещё кого-то? Просто добавим ещё одну строку, к примеру

deny from 93.121.788

5

Re: Защита WordPress от взлома

Пишем плагин для защиты от зловредных url-запросов

В чём проблема?
Хакеры и недохакеры всех родов очень часто пытаются найти слабые места при помощи всевозможных зловредных запросов. Wordpress неплохо защищён от этого, но лишняя защита никогда не повредит.

Что делаем?
Создаём новый файл под названием blockbadqueries.php и помещаем его в папку wp-content/plugins. Затем просто активируйте его в админке как любой другой плагин.

<?php
/*
Plugin Name: Block Bad Queries
Plugin URI: perishablepress.com/press/2009/12/22/protect-wordpress-against-malicious-url-requests/
Description: Protect WordPress Against Malicious URL Requests
Author URI: 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 символов) и наличие php-функций eval или base64 в URI. Если что-то из этого находится, браузеру пользователя отдаётся страница с ошибкой 414.

6

Re: Защита WordPress от взлома

Личеры!

В чём проблема?
Мир полон добрых людей, которые изо всех сил пытаются донести до других новость или статью, написанную вами. Всё бы ничего, но ведь по доброте душевной они берут картинки прямо с наших с вами серверов, скромно забывая при этом про слово «трафик». А теперь представьте что будет, если ссылки на наши картинки попадут на какой-нибудь популярный китайский блог, с их-то почти уже четырёхсотмиллионным интернет-населением!
Достаём в очередной раз файлик .htaccess и пишем следующее:

RewriteEngine On
#Замените ?mysite\.ru/ на адрес вашего сайта
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?mysite\.ru/ [NC]
RewriteCond %{HTTP_REFERER} !^$
#Замените /images/nohotlink.jpg на название вашей картинки с лозунгом «личер Smile!»
RewriteRule .*\.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpg [L]

При помощи этих правил мы заставляем сервер проверять откуда пришёл запрос на нашу фотку — если со страниц нашего сайта, он отдаёт её пользователю. Если с «вражеского» — то показывает личерам какую-нибудь обидную картинку.

7

Re: Защита WordPress от взлома

Нет дефолтному юзернейму «admin»)!

В чём проблема?
Злоумышленникам всегда проще получить доступ к сайту при помощи брута, если уже известен логин. При этом на протяжении многих лет дефолтный логин админа был примитивным до зубного скрежета — «admin».

Надо сказать, что в новом Wordpress 3.0 у вас есть право указать любой логин, какой только душе будет угодно. Для остальных версий нужно применить одно волшебное заклинание.

Что делаем?
Просто выполняем этот запрос к базе данных:

UPDATE wp_users SET user_login = 'Ваш новый логин' WHERE user_login = 'Admin';

С помощью sql-запроса меняем дефолтный логин. Правда, есть одно «но». Посты, написанные ранее admin'ом не поменяют своего автора. А для того чтобы извести admin'a на корню, необходимо выполнить ещё один запрос:

UPDATE wp_posts SET post_author = 'Ваш новый логин' WHERE post_author = 'admin';

8

Re: Защита WordPress от взлома

Защита директорий на сервере от просмотра

В чём проблема?
Очень многие хостеры позволяют просматривать директории на своих серверах. Поэтому, если ввести в адресную строку www.вашблог.ru/wp-includes, то очень часто можно увидеть всё содержимое этой директории. Безусловно это небезопасно, поэтому лучше это сразу запретить.

Что делаем?
Вы можете либо добавить пустые файлы index.html в папки, просмотр которых хотели бы запретить. Либо дополнить наш .htaccess ещё одной строкой:

Options All -Indexes

Пустой index.html будет выдаваться каждый раз, когда последует запрос к директории. Ну а директива в .htaccess просто запрещает апачу выдавать список содержимого директории.

Материал взят с habrahabr.ru