Чек-лист безопасности сайта перед запуском
Практика3 минРедакция Innovialabs
Коротко
Перед запуском включите HTTPS и заголовки безопасности, закройте админку, удалите стандартные учётки и debug-режим, обновите всё, защитите формы и убедитесь, что бэкапы восстанавливаются, а ошибки доходят до вас.
Короткий ответ
Большинство взломов сайтов обходятся без изощрённых атак — используется то, что осталось открытым: пароль по умолчанию, забытый .env, устаревший плагин, страница отладки. Пройдите список ниже на production-сервере, а не на своём ноутбуке, за несколько дней до запуска.
HTTPS
- Действующий сертификат покрывает все используемые домены и поддомены, включая
www. - Все HTTP-запросы перенаправляются на HTTPS постоянным редиректом.
- Автопродление сертификата настроено и проверено.
- Нет смешанного контента: картинки, скрипты и шрифты грузятся по HTTPS.
- Старые протоколы отключены, сервер или CDN работает на TLS 1.2 и 1.3.
Заголовки безопасности
Заголовки подсказывают браузеру, как защищать пользователей. Разумная отправная точка для nginx:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header X-Frame-Options "DENY" always;
add_header Content-Security-Policy "default-src 'self'; frame-ancestors 'none'" always;
Content-Security-Policy в этом примере строгая и, скорее всего, заблокирует аналитику, шрифты или виджеты — перечислите источники, которые вы реально используете. HSTS включайте, только когда уверены, что все поддомены работают по HTTPS.
Доступ к админке
- Админка не висит по очевидному адресу, а лучше доступна только через VPN или белый список IP.
- Двухфакторная аутентификация для каждого администратора.
- У каждого сотрудника своя учётка, общего логина «admin» нет.
- Попытки входа ограничены по частоте.
- SSH работает по ключам, вход по паролю и прямой вход под root отключены.
- Порты базы данных закрыты от интернета.
Стандартные учётки и тестовые данные
- Пароли по умолчанию в CMS, базах данных, роутерах и панелях управления изменены.
- Тестовые пользователи вроде
test@test.comи демо-контент удалены. - API-ключи и пароли не лежат в репозитории, а хранятся в переменных окружения или менеджере секретов; ключи, которые использовались при разработке, перевыпущены.
Debug-режим и открытые файлы
- Debug выключен: пользователь видит нейтральную страницу ошибки, а не stack trace.
- Эти пути отдают 404 или 403:
/.git,/.env, архивы бэкапов,phpinfo, дампы базы. - Листинг директорий отключён.
- Source maps не раздаются публично, если вы не решили это сознательно.
- Баннеры с версиями сервера и фреймворка по возможности скрыты.
Обновления и зависимости
- CMS, плагины, темы, фреймворк и пакеты сервера на актуальных поддерживаемых версиях.
- Неиспользуемые плагины и модули удалены, а не просто выключены.
- Аудит зависимостей (
npm audit,composer audit,pip-auditили аналог) не показывает известных критичных проблем. - Назначен ответственный за установку обновлений безопасности после запуска.
Защита форм
- Серверная валидация каждого поля; проверки в браузере — только для удобства.
- Запросы к базе используют параметры, а не склейку строк.
- Пользовательский ввод экранируется при выводе.
- CSRF-защита на формах, которые меняют данные.
- Ограничение частоты и антиспам на формах обратной связи, входа, регистрации и сброса пароля.
- Загрузка файлов: тип и размер проверяются на сервере, файлы хранятся вне веб-корня или в объектном хранилище и никогда не исполняются.
Бэкапы
- Автоматические бэкапы базы данных и загруженных файлов.
- Копии хранятся отдельно от основного сервера.
- Тестовое восстановление проведено — бэкап, который никто не восстанавливал, это лишь надежда.
Логи и мониторинг
- Логи доступа и приложения хранятся достаточно долго, чтобы расследовать инцидент.
- В логах нет паролей, токенов и полных номеров карт.
- Мониторинг доступности оповещает живого человека.
- Ошибки приложения собираются в инструмент, который команда действительно смотрит.
- Входы в админку и изменения прав логируются.