Токен проверки CSRF: идентификатор сеанса безопасен? - PullRequest
7 голосов
/ 06 февраля 2009

В asp.net я реализую IHttpModule для смягчения атак CSRF. Он вставляет в ответ html скрытый параметр формы с идентификатором asp.net SessionID в GET. На POST он затем проверяет, что значение скрытого параметра соответствует текущему SessionID. Насколько я знаю, единственный способ получить значение SessionID - это файл cookie, который не может быть прочитан или определен вредоносным сайтом. Есть что-нибудь, что я пропускаю?

Ответы [ 2 ]

8 голосов
/ 06 февраля 2009

Этот подход верен. Вы должны убедиться, что все действия, доступные через операцию GET, являются «безопасными» (что в любом случае рекомендуется), поскольку ваша защита XSRF применяется только к POST.

Для дополнительной страховки вы можете использовать его и в GET (добавив параметр URL во все ваши ссылки и проверяя его в каждом запросе GET), но это громоздко.

Если вы параноик, вы можете выбрать другое случайное число для альтернативного идентификатора. Это защитит вас, даже если браузер неправильно сделает ваш файл cookie сеанса доступным для некоторого враждебного Javascript на другом сайте. Когда сеанс создан, выберите другое большое случайное число и сохраните его в своем сеансе.

6 голосов
/ 06 февраля 2009

В идеале вы хотели бы использовать что-то кроме идентификатора сессии, но в основном это все. OWASP предлагает использовать случайное имя элемента формы, которое хранится в сеансе пользователя. Таким образом, злоумышленник даже не сможет подделать правильное скрытое поле.

http://www.owasp.org/index.php/Top_10_2007-A5#Protection

...