Вопросы по защите CSRF от Django - PullRequest
6 голосов
/ 20 мая 2011

В документации есть объяснение здесь , но у меня возникли дополнительные вопросы ..

Зачем нужен выделенный файл cookie CSRF?

Если Django не использует специфичные для транзакции одноразовые номера, почему бы просто не встроить идентификатор сеанса в тело запроса POST?

Почему одноразовые номера CSRF должны быть привязаны к идентификатору сеанса? Джанго это делает?

Эта веб-страница , по-видимому, подразумевает, что одноразовый номер CSRF должен быть привязан к идентификатору сеанса (например, одноразовый номер CSRF = ключевой хэш идентификатора сеанса). Это почему? Связывает ли Django свой одноразовый номер CSRF с идентификатором сеанса?

Почему Django использует одноразовые номера, не зависящие от сессии, а не специфичные для транзакции одноразовые номера?

Это из-за проблем с производительностью? Интуитивно понятные одноразовые транзакции кажутся более безопасными по своей природе.

1 Ответ

3 голосов
/ 13 августа 2011

Защита CSRF и сеанс имеют различную природу, поэтому размещение их в одном файле cookie усложнит его обслуживание.

Вот некоторые отличия:

  1. Вы можете использовать защиту CSRF без использования сессий.
  2. Возможно, вы захотите использовать CSRF до начала сеанса (т. Е. Вы не хотите начинать сеанс до того, как пользователь войдет в систему, из-за производительности, но вы хотите защитить свою контактную форму с помощью CSRF).
  3. Иногда вы хотите удалить сессионный cookie, но, вероятно, никогда не CSRF.
  4. Защита CSRF необходима для одного сеанса браузера (пока вы не закроете браузер), но сеансы могут продолжаться даже в течение нескольких недель.
  5. Возможно, вы захотите провести междоменную сессию, но, вероятно, вам никогда не понадобится междоменная CSRF.
...