CSRF (Cross-Site Request Forgery) — атака, где злоумышленник заставляет пользователя выполнить action на вашем сайте (перевод денег, изменение пароля) через cross-site request. Mitigation: 1) **SameSite cookie** (default Strict/Lax в 2026 browsers), 2) **CSRF token** в формах (synchronizer token pattern), 3) **Check Origin/Referer** headers. Современные frameworks делают это automatic.
Ниже: пошаговая инструкция, рабочие примеры, типичные ошибки, FAQ.
SameSite=Lax (default в modern browsers, но явно лучше) + HttpOnly + SecureX-CSRF-Token) — simple requests не могут его set без JS| Сценарий | Конфиг |
|---|---|
| PHP session-based token | <?php
session_start();
if (empty($_SESSION['csrf_token'])) {
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}
// Form:
echo '<input type="hidden" name="_token" value="' . $_SESSION['csrf_token'] . '">';
// Validate:
if (!hash_equals($_SESSION['csrf_token'], $_POST['_token'] ?? '')) {
http_response_code(403);
exit('CSRF');
} |
| Django (auto) | # settings.py
MIDDLEWARE = ['django.middleware.csrf.CsrfViewMiddleware', ...]
# In template:
# <form method="post">{% csrf_token %} ... </form> |
| Express.js (csurf) | const csrf = require('csurf');
app.use(csrf({ cookie: true }));
app.get('/form', (req, res) => {
res.render('form', { csrfToken: req.csrfToken() });
}); |
| SameSite cookie | Set-Cookie: session=abc; HttpOnly; Secure; SameSite=Lax
# Lax — allows top-level GET, blocks cross-site POST
# Strict — blocks всё cross-site (breaks OAuth callbacks) |
| Origin header check | $allowed = ['https://example.com', 'https://www.example.com'];
$origin = $_SERVER['HTTP_ORIGIN'] ?? '';
if (!in_array($origin, $allowed)) { http_response_code(403); exit; } |
=== — timing attack. Используйте hash_equals()Инструмент проверяет HTTP-заголовки безопасности, конфигурацию SSL/TLS, утечки серверной информации и защиту от распространённых атак (XSS, clickjacking, MIMEsniffing). Оценка от A до F показывает общий уровень защиты.
Проверка Content-Security-Policy, HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy и других.
Версия TLS, срок сертификата, цепочка доверия, поддержка HSTS.
Поиск раскрытых серверных версий, debug-режимов, открытых конфигов и директорий.
Детальный отчёт с объяснением каждой проблемы и конкретными шагами для исправления.
аудит HTTP-заголовков
проверка конфигурации
CSP и HSTS настройка
соответствие стандартам
Strict-Transport-Security.Server: Apache/2.4.52 помогает атакующим подобрать эксплойт. Скройте версию.DENY или SAMEORIGIN.nosniff браузер может интерпретировать файлы неправильно (MIME sniffing).Content-Security-Policy-Report-Only, мониторьте нарушения, затем включите.Server, X-Powered-By, X-AspNet-Version из ответов.История security-проверок и мониторинг HTTP-заголовков безопасности.
Зарегистрироваться (FREE)Для top-level GET — да. Для POST/PUT/DELETE — Lax блокирует cross-site, это core CSRF mitigation. Но defence-in-depth: token на state-changing forms обязателен.
Да, если cookies. JWT в header (Bearer) — CSRF ok (attacker не может set custom header). Cookies — vulnerable без CSRF token.
Double-Submit Cookie: CSRF token в cookie + в request header. Attacker не может read cookie (SameOrigin), не знает value для header.
Create test page на другом domain с <code>fetch('/your-site/action', {method: 'POST', credentials: 'include'})</code>. Должен быть blocked.