2014-11-18 3 views
11

Я знаю, что для защиты веб-приложений от Cross Site Request Forgery единственным защищенным методом является реализация токена CSRF. Мой вопрос: нельзя ли использовать токен CSRF для отслеживания сеансов? Почему мы должны использовать другой идентификатор сеанса для отслеживания сеансов?Какова цель использования идентификатора сеанса, когда защита csrf уже реализована?

ответ

4

Значок CSRF - это значение, которое должно генерироваться случайным образом и ассоциироваться с сеансом (пользователем) в КАЖДЫЙ GET, который показывает форму для предотвращения ложных POST. Этот ложный POST также поступает из пользовательского браузера, поэтому для аутентификации POST вам нужен сеанс с токеном, хранящимся в памяти сервера, для сравнения, если токен, который поставляется с POST, является тем же самым, что и в сеансе пользователя.

Кроме того, shuold для веб-приложений необходимо идентифицировать пользователей в токенах GET и CSRF только в POST.

Сессия должна быть статичной для идентификации пользователя по времени и нескольких запросов из-за отключенного характера HTTP. CSRF изменяется в каждом GET, он не может использоваться как сеанс.

С другой стороны. Какой сервер должен делать с вашей идеей? Создайте новый сеанс каждый GET и скопируйте все предыдущие данные сеанса на новый сеанс? Это безумие.

Взгляните на this pdf в Университет штата Монтана. Это помогает мне понять CSRF.

+0

"** Значки CSRF только в POST **" неправильно! Я думаю, что вся ваша идея о токенах csrf неверна. –

+0

Тогда государственный университет Монтаны тоже ошибается ... Итак, как f *** отправляет вам токен CSRF в GET ?. В строке запроса? И почему вы хотели бы это сделать, если в GET вы не должны выполнять какую-либо операцию, которая должна быть аутентифицирована. – jlvaquero

+1

Короткий ответ: сессия должна быть статичной, чтобы идентифицировать пользователя во времени. CSRF меняется в каждом GET. Если вы повторяете токены CSRF, чтобы использовать их как сеанс, вы делаете неправильно. – jlvaquero