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

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

Защита сайта с помощью .htaccess

Очень простой, но очень эффективный способ защитить свой сайт от несанкционированного доступа – правильно настроить .htaccess. Всего несколько строчек в этом файле помогут вам защитить сайт, даже если ваш пароль был украден через взлом вашего рабочего компьютера, или компьютера вашего сотрудника.

Шаг 1 – Защита администраторской части сайта по IP. От вас требуется создать текстовой файл, который мы назовем htaccess.txt. В него вставляем следующие строки:

# Защита администраторской части по IP
order deny,allow
deny from all
# Здесь мы вводим свой внешний IP адрес
allow from 12.34.56.78
# Вводим IP адрес своего сотрудника
Allow from 1.2.3.4

Сохраняем наш файл и подключаемся по FTP к нашему сайту. Там мы переходим в папку админа, в wordpress это /wp-admin/ и закачиваем файл туда. Когда файл закачался, просто переименовываем его в .htacess. Таким образом, никто кроме вас и вашего сотрудника не сможет открыть панель администратора. Предположим, что рабочий компьютер вашего сотрудника был заражен трояном. Пароли к вашему сайту попали в руки злоумышленника и он пытается зайти в администраторскую часть сайта, чтобы установить вредоносный код, или украсть данные зарегистрированных пользователей. Эти несколько строк сделают так, что он получит ошибку при обращении к администраторской части вашего сайта, соответственно, все его старания будут бесполезны, ведь доступ к панели администратора могут получить только люди с Ip адресом, который вы указали в .htaccess.

Внимание! Не редактируйте файл .htaccess, который находится в корневой директории сайта! Вам нужно создать абсолютно новый файл и закачать его именно в администраторскую директорию.

Шаг 2 – Запрет на исполнение PHP файлов в определенных директориях. Очень часто хакеры загружают файлы с вредоносным кодом в директориях, где очень тяжело найти в каком именно файле спрятан вирус. В WordPress это могут быть /wp-content/uploads/ а так же /wp-includes/ папки. Для того, чтобы запретить выполнение php файлов, мы по такому же принципу должны создать .htaccess файлы ы каждой из папко и вставить туда следующие строки кода:

<Files *.php>
deny from all
</Files>

Шаг 3 – Защита базы данных. Если у вас на сервере есть файл с настройками базы данных, где информация хранится в открытом виде, то будет лучше, если вы заблокируете доступ к нему посторонним людям. В WordPress таким файлом является wp-config.php, именно в нем хранятся все данные для подключения к базе данных:
защита через htaccess

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

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

Шаг 4 – Защита авторов от брутфорса. Одной из самых распространенных атак – это попытка подбора паролей к администраторской части сайта и к аккаунтам авторов на вашем сайте. Запускается сканер, который ползает по вашему сайту и собирает имена авторов. Следующий этап – это подбор паролей к аккаунтам пользователей. И если мы предполагаем, что вы уже прочитали сотни статей о том, что пароль администратора должен быть сложным, то авторы и модераторы могут задать что то вроде “1234567”. Таким образом, когда хакер просканировал ваш сайт и собрал логины ваших авторов и модераторов, то все, что ему остается – это запустить автоматический подбор паролей, а дальше уже дело случая. Чтобы не надеяться на бдительность ваших сотрудников и блогеров на вашем сайте, лучше закрыть возможность сбора данных о них на всем сайте. Сделать это можно все через тот же .htaccess и в wordpress вам нужно просто добавить следующие строки:

# блокировка сканирования авторов
RewriteEngine On
RewriteBase /
RewriteCond %{QUERY_STRING} (author=\d+) [NC]
RewriteRule .* - [F]
# конец блокировки

Шаг 5. Защита от некоторых SQL инъекций. Одной из самых распространенных атак на WordPress CMS – является атака с использование SQL – инъекции. Это прозвучит слишком хорошо, чтобы быть правдой, но при помощи .htaccess вы сможете защитить сайт от этого рода атак, вставив следующие строки кода в корневой файл .htaccess:


# Включаем rewrite engine

RewriteEngine On
# Блокируем подозрительные запросы
RewriteCond %{REQUEST_METHOD} ^(HEAD|TRACE|DELETE|TRACK|DEBUG) [NC]
RewriteRule ^(.*)$ - [F,L]
# Блокируем WordPress timthumb хак
RewriteCond %{REQUEST_URI} (timthumb\.php|phpthumb\.php|thumb\.php|thumbs\.php) [NC]
RewriteRule . - [S=1]
# Блокируем SQL инъекции, RFI, base64, и прочие.
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=http:// [OR]
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=http%3A%2F%2F [OR]
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=(\.\.//?)+ [OR]
RewriteCond %{QUERY_STRING} [a-zA-Z0-9_]=/([a-z0-9_.]//?)+ [NC,OR]
RewriteCond %{QUERY_STRING} \=PHP[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} [NC,OR]
RewriteCond %{QUERY_STRING} (\.\./|\.\.) [OR]
RewriteCond %{QUERY_STRING} ftp\: [NC,OR]
RewriteCond %{QUERY_STRING} http\: [NC,OR]
RewriteCond %{QUERY_STRING} https\: [NC,OR]
RewriteCond %{QUERY_STRING} \=\|w\| [NC,OR]
RewriteCond %{QUERY_STRING} ^(.*)/self/(.*)$ [NC,OR]
RewriteCond %{QUERY_STRING} ^(.*)cPath=http://(.*)$ [NC,OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*iframe.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (<|%3C)([^i]*i)+frame.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [NC,OR]
RewriteCond %{QUERY_STRING} base64_(en|de)code[^(]*\([^)]*\) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} ^.*(\[|\]|\(|\)|<|>).* [NC,OR]
RewriteCond %{QUERY_STRING} (NULL|OUTFILE|LOAD_FILE) [OR]
RewriteCond %{QUERY_STRING} (\./|\../|\.../)+(motd|etc|bin) [NC,OR]
RewriteCond %{QUERY_STRING} (localhost|loopback|127\.0\.0\.1) [NC,OR]
RewriteCond %{QUERY_STRING} (<|>|'|%0A|%0D|%27|%3C|%3E|%00) [NC,OR]
RewriteCond %{QUERY_STRING} concat[^\(]*\( [NC,OR]
RewriteCond %{QUERY_STRING} union([^s]*s)+elect [NC,OR]
RewriteCond %{QUERY_STRING} union([^a]*a)+ll([^s]*s)+elect [NC,OR]
RewriteCond %{QUERY_STRING} (;|<|>|'|"|\)|%0A|%0D|%22|%27|%3C|%3E|%00).*(/\*|union|select|insert|drop|delete|update|cast|create|char|convert|alter|declare|order|script|set|md5|benchmark|encode) [NC,OR]
# PHP-CGI Уязвимости
RewriteCond %{QUERY_STRING} ^(%2d|\-)[^=]+$ [NC,OR]
# proc/self/environ? Ни в коем случае! Блокируем!
RewriteCond %{QUERY_STRING} proc\/self\/environ [NC,OR]
RewriteCond %{QUERY_STRING} (sp_executesql) [NC]
RewriteRule ^(.*)$ - [F,L]

Включаем автоматические апдейты

Сколько бы не писали и не предупреждали о важности своевременных апдейтов, 90% вебмастеров все равно всегда тянут до последнего и вспоминают о том, что надо следить за апдейтами безопасности CMS и плагинов, только после того, как их сайт взломан. Каждая статья о безопасности той или иной CMS начинается с того, что нужно создавать очень длинные и сложные пароли и нужно делать ежедневные апдейты. Но на практике мы видим совершенно другую картину, потому вот простой пример, как, потратив 10 минут времени, можно навсегда избавиться от лишней головной боли и включить автоматические апдейты на ваших сайтах.

Просто подключитесь через FTP к своему серверу, где расположен ваш сайт. В случае с WordPress найдите файл конфигурации wp-config.php и в нем найдите строку “define( ‘AUTOMATIC_UPDATER_DISABLED’, true );” просто закомментируйте данную строку, добавив # перед ней. Дальше сохраните файл и наслаждайтесь автоматическими апдейтами.

Предостережение. Случаются ситуации, когда апдейт файлов CMS приводит к нарушению работы шаблонов, или плагинов. Хороший пример с выпуском Gutenberg в WordPress. Многие сайты, которые использовали другие PageBuilder просто перестали работать. Веб мастерам пришлось вручную удалять Gutenberg, чтобы возобновить работу сайта. Именно поэтому, когда вы получаете уведомление на email администратора о том, что ваш сайт был обновлен до новой версии, не поленитесь и зайдите на свой сайт и убедитесь, что все работает корректно.

Использование плагинов

Современные CMS приучили нас к тому, что все можно решить при помощи плагинов. Для любой задачи уже есть написанный код и нам нужно просто щелкнуть мышкой “Установить”, а затем расставить галочки в настройках плагина. С одной стороны это очень хорошо, особенно для людей, которые не знают разницу между html и php. А с другой стороны, вместо того, чтобы решить простую задачу, отредактировав один из файлов CMS, мы устанавливаем плагин. А через год в администраторской части сайта мы уже не можем понять какой плагин и зачем мы ставили, а ведь любой плагин разрабатывается людьми, причем очень часто совершенно далекими от понятий безопасности или хорошего кода. Когда вы устанавливаете плагины, которые разрабатывались энтузиастами, вы просто соглашаетесь с тем, что ваш сайт однажды будет взломан. Только 30% изученных нами плагинов для wordpress соответствуют нормам безопасности, следовательно, остальные 70% – это игра в рулетку.

Главная наша рекомендация – это использовать плагины только тогда, когда они действительно необходимы. Если вы установили плагин и он оказался вам ни к чему, то мало просто его деактивировать, его нужно удалить! А мелкие задачи, которые можно решить и без плагинов, лучше все таки выполнять вручную, тем самым минимизировав риски быть взломанным.