📝 Django

CSRF-защита в Django

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

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)

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

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

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

🔗 Похожие

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

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

📝

pytest-django: тестирование Django

Охватываемые темы: Установка, @pytest.mark.djangodb, Фикстуры, Тестирование views.

📅 30.06.2026 👁️ 132
📝

AI-агенты: ReAct loop и автономные действия

Чат-бот отвечает на вопросы. Агент — действует: вызывает инструменты, получает реальные данные и использует их...

📅 30.06.2026 👁️ 100
📝

RAG: чат с документами через векторный поиск

RAG (Retrieval-Augmented Generation) — паттерн для работы с собственными документами. Вместо того чтобы переобучать модель,...

📅 30.06.2026 👁️ 89

Понравилась статья?

Подпишитесь на наши обновления и получайте новые статьи первыми. Развивайтесь вместе с PyLand!