Аудит безопасности сайта
Аудит безопасности — систематический поиск уязвимостей до того, как их найдут злоумышленники. Сочетает автоматизированное сканирование и ручное тестирование. Результат — приоритизированный список уязвимостей с конкретными шагами устранения.
OWASP Top 10 — что проверяем
A01: Broken Access Control — можно ли получить доступ к чужим данным? A02: Cryptographic Failures — хранятся ли пароли в plain text, используется ли HTTPS везде? A03: Injection — SQL, NoSQL, OS Command injection A04: Insecure Design — логические уязвимости в бизнес-процессах A05: Security Misconfiguration — открытые директории, дефолтные пароли A07: Identification and Authentication Failures — отсутствие rate limiting, слабые сессии
Автоматизированное сканирование
# OWASP ZAP: комплексное веб-сканирование
docker run -v $(pwd):/zap/wrk/:rw \
ghcr.io/zaproxy/zaproxy:stable zap-baseline.py \
-t https://mysite.com \
-r zap-report.html \
-a # активное сканирование
# Nikto: быстрое сканирование
nikto -h https://mysite.com -output nikto-report.html -Format htm
# Nuclei: сканирование по шаблонам CVE
nuclei -u https://mysite.com -severity critical,high -o nuclei-results.txt
# SSL/TLS
testssl.sh --fast --html https://mysite.com
# Headers
curl -I https://mysite.com | grep -E "(X-Frame|X-XSS|Content-Security|Strict-Transport|X-Content-Type)"
Ручное тестирование
SQL Injection:
# Проверяем все входные точки:
GET /users?id=1' # если 500 — уязвимо
GET /search?q=1' OR '1'='1
# Проверка через sqlmap (только на своём сайте!)
sqlmap -u "https://mysite.com/users?id=1" --dbs --batch
XSS:
# Базовые payload
<script>alert(1)</script>
"><img src=x onerror=alert(1)>
javascript:alert(1)
# В полях форм, URL-параметрах, заголовках
IDOR (Insecure Direct Object Reference):
# Авторизовавшись как user1, пробуем получить данные user2
curl -H "Cookie: session=user1_session" https://mysite.com/api/users/2/profile
curl -H "Cookie: session=user1_session" https://mysite.com/api/orders/other_user_order_id
Аутентификация:
# Brute force без блокировки?
for i in {1..100}; do
curl -s -o /dev/null -w "%{http_code}" \
-d "[email protected]&password=wrong$i" \
https://mysite.com/login
done | sort | uniq -c
# Предсказуемые токены?
# Слабые JWT?
jwt-cracker <token> -d rockyou.txt
Security Headers: чеклист
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'nonce-{RANDOM}'; style-src 'self'; img-src 'self' data: https://cdn.mysite.com; frame-ancestors 'none';" always;
add_header X-Frame-Options "DENY" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
Проверка инструментами
# Mozilla Observatory
curl "https://http-observatory.security.mozilla.org/api/v1/analyze?host=mysite.com&rescan=true" \
-X POST | jq '.grade'
# securityheaders.com API
curl "https://securityheaders.com/?q=mysite.com&followRedirects=on" -I | grep "X-Grade"
Отчёт об аудите
## Критические уязвимости (требуют немедленного исправления)
### CVE-001: SQL Injection в /api/search
- **CVSS:** 9.8 (Critical)
- **Вектор:** Параметр `q` не санируется, возможно извлечение всей БД
- **PoC:** `GET /api/search?q=1' UNION SELECT table_name FROM information_schema.tables--`
- **Исправление:** Параметризованные запросы
## Высокие уязвимости
### CVE-002: Отсутствует rate limiting на /login
- **CVSS:** 7.5 (High)
- **Вектор:** Неограниченный brute force паролей
- **Исправление:** Fail2ban, CAPTCHA после 5 попыток, временная блокировка IP
Аудит безопасности среднего веб-приложения — 3–7 рабочих дней.







