CSRF (Cross-Site Request Forgery) — атака, при которой злоумышленник заставляет браузер пользователя отправить запрос от его имени.
Как работает Django CSRF
- При первом посещении Django устанавливает cookie
csrftoken - Каждая HTML-форма с POST должна содержать скрытое поле с токеном
- Django сверяет токен из формы с токеном в cookie
- Если не совпадает — ответ
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)
Комментариев пока нет
Станьте первым, кто поделится мнением об этой статье!