📝 Django

CSRF-защита в Django

P
Автор
PyLand Team
📅
Опубликовано
30.06.2026
⏱️
Время чтения
1 мин
👁️
Просмотров
293
🌿
Уровень
Средний

CSRF (Cross-Site Request Forgery) — атака, при которой злоумышленник заставляет браузер пользователя отправить запрос от его имени.

Как работает Django CSRF

  1. При первом посещении Django устанавливает cookie csrftoken
  2. Каждая HTML-форма с POST должна содержать скрытое поле с токеном
  3. Django сверяет токен из формы с токеном в cookie
  4. Если не совпадает — ответ 403 Forbidden

Тег в шаблоне

<form method="post">
  {% csrf_token %}
  {{ form.as_p }}
  <button type="submit">Отправить</button>
</form>

{% csrf_token %} генерирует:

<input type="hidden" name="csrfmiddlewaretoken" value="abc123...">

AJAX-запросы

// Получить токен из cookie
function getCookie(name) {
    const value = `; ${document.cookie}`;
    const parts = value.split(`; ${name}=`);
    if (parts.length === 2) return parts.pop().split(';').shift();
}

fetch('/api/tasks/', {
    method: 'POST',
    headers: {
        'X-CSRFToken': getCookie('csrftoken'),
        'Content-Type': 'application/json',
    },
    body: JSON.stringify({title: 'New Task'}),
});

Исключение для API

from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def api_endpoint(request):
    ...  # Только если используете другую аутентификацию (токены)

DRF автоматически исключает CSRF для API-запросов с токенами.

Middleware

MIDDLEWARE = [
    ...
    'django.middleware.csrf.CsrfViewMiddleware',
    ...
]

Middleware уже включён по умолчанию — не удаляй.

Ваша реакция на статью

💬 Комментарии (0)

🔐 Войдите в систему, чтобы оставить комментарий
🚪 Войти
💭

Комментариев пока нет

Станьте первым, кто поделится мнением об этой статье!

🔗 Похожие

Похожие статьи

Продолжите изучение с этими материалами

📝

settings.py: настройки Django

settings.py — центральный конфигурационный файл Django-проекта.

📅 30.06.2026 👁️ 314
📝

Миграции Django

Миграция — файл с описанием изменений в схеме БД. Django отслеживает состояние моделей и генерирует...

📅 30.06.2026 👁️ 284
📝

Сервер разработки Django

Встроенный сервер Django удобен для локальной разработки: он запускает проект и автоматически перезагружает код при...

📅 30.06.2026 👁️ 288
🎓 Продолжить обучение

В каких курсах используется этот материал

Перейдите к курсу, чтобы закрепить материал на практике.

Django RequestLab: от HTTP до безопасного продакшена Открыть программу курса