Безопасность сайта за вечер: 10 шагов, которые можно проверить самому

Пароли, вход в два шага, HTTPS, заголовки, адрес панели, права, копии и спам: у каждого шага три строки — что сделать, как проверить самому и что будет, если не делать. Без страшилок.
Взломы небольших сайтов чаще всего не охота лично за вами. Это боты, которые днями перебирают одни и те же слабые места: короткие пароли, старые версии, панель по стандартному адресу, открытую регистрацию. Закройте эти места, и ваш сайт перестанет быть лёгкой целью. Ниже десять шагов на один вечер. У каждого три строки: что сделать, как проверить самому (экран или команда) и что будет, если не делать.
Список не сводится к «нажмите всё подряд»: шаги независимы, их можно брать по одному. Часть работы движок делает сам: например, отправляет заголовки безопасности браузеру (шаг 5), вам остаётся убедиться, что они доходят.
Ваш пульт: «Защита сайта» #
Откройте «Система → Безопасность → Защита сайта». Это один экран, на котором видно, что в порядке, что стоит подтянуть и что плохо. Каждая строка объясняет себя и ведёт туда, где это правится. Почти каждый шаг ниже проверяется по строке на этом экране.
Это подсказка, а не приговор: цифры считаются на лету по данным вашего сайта.
Шаг 1. Обновления #
Что сделать. Откройте «Система → Обновления» (страница видна тем, у кого есть право на настройки сайта: владельцу и администратору) и обновитесь, если есть новая версия. Перед обновлением сделайте копию базы (шаг 8): движок делает её сам, но ручная копия ничего не стоит. Как проверить. На той же странице видно, какая версия стоит и есть ли новая. Раз в неделю смотрите туда же, где вы проверяете заказы или почту. Если не делать. Дыры, которые уже закрыты в новой версии, остаются у вас, и о них известно всем: исправление выходит вместе с описанием ошибки.Шаг 2. Пароль и подбор пароля #
Что сделать. В «Настройки сайта → Вход и пользователи → Регистрация и пользователи» поставьте «Наименьшая длина пароля» от 10 знаков (это значение по умолчанию). Длина сама по себе не спасает, но очевидные пароли движок отвергает отдельно. Затем в «Безопасность → Вход и сеансы» убедитесь, что «Попыток входа» не больше десяти. По умолчанию это пять неудач, после чего вход в эту учётную запись закрыт на 15 минут (срок меняется в поле «Запирать на, минут»), и бот упирается в лимит. Как проверить. На экране «Защита сайта» строки «Длина пароля» и «Блокировка после неудачных входов» должны быть «Хорошо». Если не делать. Короткие пароли и безлимитные попытки делают перебор вопросом времени. Это самый простой способ взлома, и он закрывается двумя числами.Шаг 3. Вход в два шага #
Что сделать. В своём профиле включите второй шаг («Включить второй шаг»): код из приложения на телефоне подтверждает вход. Сохраните «Резервные коды»: каждый работает один раз и нужен, если телефон потерян. Потом попросите то же у каждого администратора. Когда все привыкнут, в «Настройки сайта → Вход и пользователи → Безопасность → Вход в панель» переключите «Двухфакторная защита» с «Рекомендовать» на «Требовать от администраторов». Это вас не запрёт: движок отправит каждого, у кого второго шага ещё нет, в профиль, чтобы включить его, а профиль доступен всегда. Так что включать не страшно. Как проверить. Строка «Два шага при входе у администраторов» на экране «Защита сайта»; в списке «Пользователи» есть фильтр «Вход в два шага», он показывает, у кого ещё выключено. Если не делать. Пароль могут украсть не у вас, а у чужого сервиса, где вы использовали тот же. Тогда без второго шага вход в панель открыт.Шаг 4. Шифрованное соединение (HTTPS) #
Что сделать. Убедитесь, что у сайта есть сертификат и он открывается поhttps://. Только после этого в «Настройки сайта → Вход и пользователи → Безопасность → Соединение» включите «Только защищённое соединение (https)». Без сертификата это включать нельзя: перенаправление уведёт посетителей в никуда.
Как проверить. Откройте сайт по адресу с http://: браузер должен перейти на https://. То же в командной строке:
curl -I http://example.comLocation: https://example.com/. Строка «Шифрованное соединение (HTTPS)» на экране «Защита сайта» должна быть «Хорошо».
Если не делать. Пароли и сеансы ходят открытым текстом: в чужой публичной сети их может прочитать посторонний.Шаг 5. Заголовки безопасности #
Что сделать. Почти ничего: движок отправляет их сам. Ваша задача убедиться, что их не срезает прокси или хостинг перед сайтом. Как проверить.curl -I https://example.comX-Content-Type-Options: nosniff: браузер не гадает тип файла;X-Frame-Options: SAMEORIGIN(на отдельных страницахDENY) и вContent-Security-Policyчастьframe-ancestors 'self': чужой сайт не вставит вашу страницу в рамку;Referrer-Policy: strict-origin-when-cross-origin: наружу не уходят лишние части адреса;Permissions-Policy: камера, микрофон и геолокация выключены, пока они не нужны;Strict-Transport-Security: max-age=31536000по https: браузер сам запомнит ходить только по защищённому соединению.
Шаг 6. Адрес панели и доступ по адресам #
Что сделать. В «Настройки сайта → Вход и пользователи → Безопасность → Вход в панель» впишите «Свой адрес панели» (латиница, цифры, дефис), придумайте свой, не копируйте пример с картинки ниже. Запишите его где-нибудь рядом с паролем. Поле «Пускать в панель только с этих адресов» нужно только тем, у кого есть постоянный адрес (например, офис со своим адресом): с чужих адресов панель ответит «страницы нет». Домашний и мобильный адрес обычно меняется, и тогда вы сами окажетесь за дверью: список без вашего текущего адреса сохранить нельзя, но завтра адрес может стать другим. Снять ограничение без панели можно только командойphp nex1on admin:access на сервере. Без доступа к консоли сервера и без постоянного адреса это поле лучше не включать.
Как проверить. Откройте новый адрес: должен открыться вход. Старый /admin должен отвечать «страницы нет» (404). Строки «Адрес панели управления» и «Доступ в панель по адресам» на экране «Защита сайта» это отразят.
Если не делать. Ничего страшного не произойдёт, но боты находят панель по стандартному адресу первой, и шум в журнале растёт. Свой адрес не заменяет пароль и вход в два шага, он лишь убирает вас из списка лёгких целей.
Пока никто не высказался. Будьте первым.