← Назад ко всем вопросам

Как работает CSRF защита в Django?

1️⃣ Как кратко ответить

CSRF защита в Django реализуется через использование CSRF-токенов, которые предотвращают выполнение нежелательных действий от имени пользователя. Каждый POST-запрос должен содержать уникальный токен, который проверяется на сервере. Это защищает от атак, где злоумышленник пытается выполнить запрос от имени пользователя без его ведома.

2️⃣ Подробное объяснение темы

Что такое CSRF?

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

Как работает CSRF защита в Django?

Django предоставляет встроенную защиту от CSRF-атак, используя CSRF-токены. Давайте разберем, как это работает:

  1. Генерация CSRF-токена:
    Когда пользователь загружает страницу с формой, Django генерирует уникальный CSRF-токен и добавляет его в HTML-код страницы. Этот токен также сохраняется в сессии пользователя.

  2. Включение CSRF-токена в запрос:
    При отправке формы (обычно через POST-запрос) CSRF-токен должен быть включен в данные запроса. Это можно сделать несколькими способами:

    • Включить токен в скрытое поле формы.
    • Передать токен в заголовке запроса, если используется AJAX.
  3. Проверка CSRF-токена на сервере:
    Когда сервер получает POST-запрос, Django проверяет наличие и корректность CSRF-токена. Если токен отсутствует или не совпадает с тем, что хранится в сессии, запрос отклоняется.

Зачем это нужно?

CSRF защита необходима для предотвращения атак, которые могут привести к выполнению нежелательных действий от имени пользователя. Без этой защиты злоумышленник может использовать доверие между пользователем и сайтом для выполнения вредоносных действий.

Пример использования в Django

Вот простой пример формы в Django, защищенной от CSRF:

<form method="post">
    {% csrf_token %}
    <input type="text" name="username" placeholder="Username">
    <input type="password" name="password" placeholder="Password">
    <button type="submit">Login</button>
</form>

В этом примере {% csrf_token %} — это специальный тег шаблона Django, который вставляет CSRF-токен в форму. Это гарантирует, что при отправке формы токен будет включен в запрос.

Как это работает с AJAX?

Если вы используете AJAX для отправки данных, вам нужно вручную добавить CSRF-токен в заголовок запроса. Вот пример с использованием jQuery:

$.ajax({
    type: "POST",
    url: "/your-url/",
    data: {
        // ваши данные
    },
    beforeSend: function(xhr, settings) {
        xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));
    },
    success: function(response) {
        // обработка успешного ответа
    }
});

Функция getCookie используется для получения CSRF-токена из cookies.

Тема: Django
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки