Безопасность сайта: мифы и реальность на примере WordPress

Сайты на WordPress любят все. И это понятно: удобно, масса плагинов, тем и прочей полезной фигни. Пожалуй, единственный недостаток сайтов на Вордпрессе в том, что порой страницы загружаются медленно. Но мы умеем настраивать сервера так, чтобы сайты на WordPress летали, часто лечим взломанные сайты на WP . Да и с простой просьбой «проверьте и защитите» к нам обращаются нередко.

Но клиенты порой формулируют задачу как «сделайте, как вот в этой статье», не понимая, что безопасность сайта обросла легендами, мифами и просто вредными советами. Иногда доказать человеку, который начитался «сказок», что лечить сайт «по написанному в какой-то статье» нельзя. Это всё равно, что лечить простуду и грипп, нацепив шапку из фольги, потому что так советовала соседка снизу.

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

Давайте мы проясним ситуацию, и отделим мух от котлет а мифы от реальности в вопросах безопасности сайтов

безопасность сайта. мифы и реальность

безопасность сайта. мифы и реальность

 

Миф №1. Авторизация на сайте доступна по стандартному адресу /wp-admin или /wp-login.php

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

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

Казалось бы, что такого? Переименовал админу и всё, проблема решена. Но это не так.  Хакер (а точнее тупой бот) будет по-прежнему стучаться на /wp-admin. Получать в ответ 404 Not Found.  А частые запросы к несуществующей странице — один из методов DDoS (называется http flood). То есть проблема с нагрузкой никуда не уйдет.

Миф№2. Имя пользователя на сайте по умолчанию — admin

Значение этой «уязвимости» явно преувеличено. Конечно хорошо когда владелец сайта — параноик, и его логин jKedJ834ed,jb&fsxcvkhvbaefdcvx и пароль klr8wjnsdcv7t93ewdjnco8gaw34ed&wisdkc. Вот только практическая польза от этого не так велика. Да, подбор пароля тупым ботом можно исключить. Вот только на перебор пароля приходится доля малая взломов. А для защиты от перебора есть более эффективные методы.

Миф№3. Количество попыток неудачной авторизации неограничено

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

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

Миф№4. Вы установили несложный распространенный пароль

Пожалуй, это первый не миф в области безопасности сайта.  Это реальная проблема. Поставьте пароль qwerty или 123456 и вас сломают — оглянуться не успеете. Так что не делайте так.

Рекомендация от Seahost: Используйте пароль подлиннее, символов 10 минимум если там несловарная белиберда и 15-20 — если там что-то понятное. Это первый и очень важный совет.

Миф№5. Можно узнать информацию о версии плагинов, тем

Тут речь о так называемой security through obscurity или безопасности через неясность. Мы в нее не верим, поэтому никому не советуем например баннер у веб-сервера убирать. Реальные угрозы устраняются своевременными обновлениями. Вы обновляете свой WP и плагины? Если нет — идите и обновите, только не забудьте перед этим сделать бэкап. Обновляйтесь регулярно.

Миф№6. Неправильные права доступа к файлам и папкам

Реальная проблема. Ваш wp-config.php не должен иметь права, позволяющие всем его прочитать — там пароль к базе данных лежит. В частности, файл .htaccess доступен для записи, права 755(777) на папки, 644/666 на файлы.

Любой адекватный хостер настраивает сервер так, чтобы клиенты не пересекались. Да, файлы лежат на одном диске. Однако клиенты изолируются друг от друга и Вася не может прочитать wp-config.php Пети даже если Петя поставил права, позволяющие этот файл читать кому угодно. И делают это хостеры именно потому, что пол интернета твердит о том, что надо поставить 777 на папку и проблема с правами исчезнет.

Однако, если после этого у клиента исчезнут файлы через какое-то время — это станет проблемой хостера. Вот он и держит клиентов каждого в своей «песочнице».

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

Проблема «htaccess доступен для записи» — фактически не является проблемой.  Во-первых, в рамках хостинга вы не имеете возможности сделать файл доступным только для чтения. Сделать-то можете, но можете и назад вернуть. И хакер может. Во-вторых, почему именно .htaccess? Предполагаю что из-за бума мобильных редиректов, который был год назад. Но теперь все знают что мобильный редирект надо начинать искать с .htaccess и хакеры практически перестали .htaccess менять.

Итак, правильные права — это хорошо. Даже отлично. Но в рамках нормального хостинга это не настолько важно, насколько об этом все говорят.

Миф №7. Стандартный префикс таблиц wp_

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

Что делать и чего не делать для безопасности сайта?

Критика это хорошо, но нужно и решение предложить. И это решение — HTTP аутентификация, проще говоря — дополнительный пароль, запрашиваемый средствами веб сервера. Обычно веб сервером работает Apache и пароль задается через .htaccess. Как это сделать опишем вкратце, в интернете полно мануалов на эту тему. В .htaccess нужно добавить

<Files "wp-login.php">
AuthUserFile /ПОЛНЫЙ_ПУТЬ_К_САЙТУ/wp-admin/.htpasswd
AuthName "restricted"
AuthType Basic
Require valid-user
</Files>

Создайте файл .htpasswd (делается утилитой htpasswd из поставки Apache):

htpasswd -bc .htpasswd ИМЯ_ПОЛЬЗОВАТЕЛЯ ПАРОЛЬ

Чем хорош этот вариант?

  • Боты отсекаются на уровне веб-сервера а не на уровне php. В переводе на русский, нагрузка от такой проверки пароля нулевая. Боты обращаются к сайту, а сайт живет и ему это никак не мешает.
  • Два пароля всегда лучше чем один. Если произойдет утечка одного пароля, второй останется.
  • Даже при одном и том же пользователе admin в админке можно сделать разным людям (владелец, редактор, копирайтер например)  разные имена пользователей. В журнале доступа веб-сервера эти имена пользователя будут в явном виде присутствовать. Если кто-то из них словит вирус и пароли уведут — по крайней мере можно будет понять кто виноват.

И еще.

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

Предохраняйтесь! Ну а если что-то случилось — не стесняйтесь обращайтесь. Мы поможем разобраться с проблемой.