2013-10-04 6 views
2

Django позволяет указать, что сеанс заканчивается при закрытии браузера (с некоторыми оговорками для Chrome). Почему он не делает это для cookie CSRF?Django CSRF Cookie - почему он не истекает в браузере?

Я спрашиваю, потому что мне кажется, что токен CSRF уязвим для утечки (например, ошибочно помещая его в сообщение на внешний сайт), и это было бы смягчением для этого. Я что-то не понимаю?

ответ

6

Я перепечатывать свой ответ из списка разработчиков, что Карл связан, так что StackOverflow имеет тоже:

Если куки были истечь в браузере близко, это вызвало бы CSRF ошибки для пользователей, которые закрыты браузера (или закладки на странице с формой ), а затем загрузили эту страницу из кеша браузера и отправили форму. Я неоднозначно отношусь к тому, подходит ли этот вариант использования (это может быть важно на мобильных устройствах, например), , но я не считаю, что установка срока действия файла cookie в браузере закрывается. обеспечивает большую безопасность для другого пользователя. правильно настроен сайт (HTTPS, HSTS и т. д.).

Выполнение CSRF Django отличается [1] от многих других, которые хранят информацию CSRF вместе с информацией о сеансе на сервере. Механизм CSRF работает, сопоставляя токен, предоставленный в форме с токеном , предоставленным в качестве файла cookie в браузере. Если вы установите cookie на 'zzz', он все равно будет работать отлично. Безопасность исходит от того факта, что злоумышленник не может установить cookie, а не , чтобы содержать какое-либо определенное криптографическое значение.

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

Тем не менее, если это может быть убедительно продемонстрировано, что установка куки истекает в браузере близко не нарушать существующие прецеденты (мобильные браузеры моя главная забота) Я открыт для изменения параметра по умолчанию поведения. Мы обычно рассматриваем его как ошибку, если любой не вредоносный пользователь может посредством невиновного поведения вызвать предупреждение CSRF.

[1] реализация CS Джанго обычно оттеняет все виды ложных тревог в большинстве инструментов пера-тестере, так как он не работает точно так же, как другие реализации делать, и не привязана к сессии печенье.

+0

Спасибо за ответ. Вопрос не в том, что злоумышленник обращается к физическому компьютеру пользователя, но уменьшает потенциальные утечки токена CSRF. Здесь я не вижу никаких смягчений. – AdamC

+0

Если у вас есть идеи о том, как можно случайно пропустить токен CSRF, я бы хотел услышать о них по электронной почте. Помимо намеренно плохого кода (отправка защищенной формы CSRF на другой сайт или предоставление пользователям возможности создавать такие формы или контрольные объекты), я не знаю ничего подобного. –

+0

Мне интересно, где пользователь находится на общедоступном компьютере. Если я не понимаю, что весь этот процесс не мог, злоумышленник прыгнул бы на общедоступный компьютер и захватил токен, а затем попытался обмануть кого-то, использующего тот же терминал? В этот момент у злоумышленника будет csrftoken (поскольку он не истекает при закрытии и не зависит от сеанса), а создание запроса легко. Как мы можем предотвратить это в случае, если я не пропущу что-то простое? – bgoers

Смежные вопросы