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