Knowledge Base
Чек-лист первичного аудита безопасности сайта
Предварительные условия
Категория: Web App Security · Риск: low
Предварительные условия
> **Важно:** Этот аудит проводится только на ресурсах, которыми вы владеете, или при наличии письменного разрешения от владельца.
1. HTTPS и TLS
- [ ] HTTPS включён и работает
- [ ] HTTP автоматически перенаправляет на HTTPS (301)
- [ ] Сертификат действителен и не истекает в ближайшие 30 дней
- [ ] Используется TLS 1.2 или TLS 1.3 (TLS 1.0/1.1 отключены)
- [ ] HSTS заголовок присутствует (`max-age` ≥ 1 год)
- [ ] HSTS includeSubDomains (если применимо)
- [ ] Цепочка сертификатов полная (включён промежуточный CA)
# Проверить TLS
curl -sI https://example.com | grep -i strict
openssl s_client -connect example.com:443 -tls1 2>&1 | grep "handshake failure"
2. Security Headers
- [ ] `Strict-Transport-Security` присутствует
- [ ] `X-Frame-Options: SAMEORIGIN` или CSP `frame-ancestors`
- [ ] `X-Content-Type-Options: nosniff`
- [ ] `Content-Security-Policy` настроен
- [ ] `Referrer-Policy` настроен
- [ ] `Permissions-Policy` настроен
- [ ] Сервер не раскрывает версию (`Server: nginx`, не `Server: nginx/1.18.0`)
3. Утечки файлов и директорий
- [ ] `.env` не открыт публично
- [ ] `.git/` не открыт публично
- [ ] `backup.zip / db.sql / dump.sql` не открыты
- [ ] `phpinfo.php / info.php` не открыты
- [ ] Directory listing отключён (нет `Index of /` в ответе)
- [ ] `/wp-admin`, `/admin`, `/phpmyadmin` не открыты без аутентификации
- [ ] Swagger/API docs не открыты публично (если не предусмотрено)
for path in /.env /.git/HEAD /backup.zip /db.sql /phpinfo.php /wp-admin/; do
code=$(curl -s -o /dev/null -w "%{http_code}" "https://example.com$path")
echo "$code $path"
done
4. Аутентификация и сессии
- [ ] Нет дефолтных паролей (admin/admin, root/root)
- [ ] Блокировка после N неудачных попыток входа
- [ ] Rate limiting на форме входа
- [ ] CSRF-защита на формах
- [ ] Secure и HttpOnly флаги на cookie
- [ ] SameSite=Strict или Lax на cookie
5. DNS и почта
- [ ] SPF-запись настроена
- [ ] DKIM настроен
- [ ] DMARC настроен (хотя бы `p=quarantine`)
- [ ] CAA-запись ограничивает выпуск сертификатов
dig example.com TXT | grep -iE 'spf|dmarc'
dig _dmarc.example.com TXT
dig example.com CAA
6. Инфраструктура
- [ ] SSH не доступен на публичном IP (или только через VPN/Tailscale)
- [ ] Firewall настроен (открыты только нужные порты: 80, 443)
- [ ] Автообновление пакетов включено или есть процесс обновления
- [ ] Резервное копирование настроено и проверено
- [ ] Мониторинг доступности работает (Uptime Kuma или аналог)
- [ ] Логирование настроено, логи хранятся ≥ 30 дней
7. Код и зависимости
- [ ] Нет известных уязвимых зависимостей (`npm audit`, `pip audit`, `composer audit`)
- [ ] Секреты не закоммичены в git (`git log -p | grep -i 'password\|secret\|token'`)
- [ ] Переменные среды используются для конфигурации (не хардкод)
Итоговая матрица рисков
| Риск | Найдено | Исправлено | Дата | |------|---------|------------|------| | Открытый .env | ☐ | ☐ | | | Нет HSTS | ☐ | ☐ | | | Устаревший TLS | ☐ | ☐ | | | Нет rate limit | ☐ | ☐ | | | Открытый admin | ☐ | ☐ | | | Нет мониторинга | ☐ | ☐ | |