Попытка узнать о безопасности. Любопытно, почему в джанго, когда представляя форму (POST), есть два отдельных "элемента", которые содержат одно и то же значение токена csrf:
- the csrftoken cookie:
COOKIES:{'csrftoken': '1effe96056e91a8f58461ad56c0d4ddc', ...
- the Form hidden csrfmiddlewaretoken:
POST:<QueryDict: {u'csrfmiddlewaretoken':
[u'1effe96056e91a8f58461ad56c0d4ddc'], ...
Если django вставляет скрытое поле csrf/значение в формы, когда он отправляет его в браузер (GET), и ожидает, что то же значение возвращается при получении POST, то почему это необходимо также установить cookie?
Более общий вопрос, если какой-либо из них отсутствует (форма, cookie), вы могли бы представить сценарий, объясняющий, как это можно использовать? (атака безопасности)?
Кстати, я провел несколько простых тестов, чтобы убедиться, что django проверял действительность каждого отдельно и действительно это:
-
если я изменил значение формы csrf перед выполнением POST, Я возвращаю эту ошибку отладки:
Недопустимый токен CSRF или неверный
-
если я удалю cookie csrf перед выполнением POST, Я получаю другую ошибку:
cookie CSRF не установлен.
Я просто знаком с основными концепциями csrf и хочу узнайте, как django помогает защитить от этих типов атак.
Спасибо,
JD
update:
Хотя оба ответа (S.Lott и M. DeSimone) были информативными и Имеют смысл, я думал, что может быть более подробное объяснение для требования наличия значения безопасности как в форме, так и в в печенье. Во время поиска вне stackoverflow.com я столкнулся сообщение в блоге из... Джеффа Этвуда.
Я включил третий ответ (извините, что ответил на мой собственный вопрос, но Я думаю, что это релевантная дополнительная информация), которая относится к блогу сообщение от Джеффа и включает цитату.