Аудит безпеки сайту
Аудит безпеки — систематичний пошук вразливостей до того, як їх знайдуть зловмисники. Поєднує автоматизоване сканування та ручне тестування. Результат — пріоритизований список вразливостей з конкретними кроками виправлення.
OWASP Top 10 — Що перевіряємо
A01: Broken Access Control — чи можна отримати доступ до чужих даних? A02: Cryptographic Failures — зберігаються ли паролі в простому тексту, використовується ли 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 робочих днів.







