Неожиданное поведение с AntiForgeryToken и ValidateAntiForgeryToken - PullRequest
2 голосов
/ 26 октября 2011

Я начал использовать AntiForgeryToken в некоторых моих формах, чтобы предотвратить подделку межсайтовых запросов. Однако я получаю странное поведение и просто хотел уточнить, это ошибка или просто я что-то делаю не так. Я использую звонок Html.AntiForgeryToken() в своей форме. Затем я использую атрибут [ValidateAntiForgeryToken] в методе действия, в который отправляется форма. На данный момент я не использую соль.

Насколько я понимаю, Html.AntiForgeryToken() создает скрытый ввод с именем __RequestVerificationToken и файлом cookie с именем __RequestVerificationToken_Lw__, которые оба должны содержать одно и то же значение.

Однако я испытываю такое поведение:

  1. Файл cookie всегда имеет одинаковое значение независимо от того, сколько раз вы ПОЛУЧИТЬ страницу
  2. Скрытый ввод имеет другое значение каждый раз, когда вы получаете страницу
  3. ValidateAntiForgeryToken проверяется каждый раз, даже с другой сайт в сценарии CSRF.
  4. Если я изменю значение скрытого ввода на стороннем сайте, токен не проверяется (ожидаемое поведение, но почему он проверяет когда значение скрытого ввода / файла cookie отличается?)

У кого-нибудь есть идеи?

1 Ответ

2 голосов
/ 26 октября 2011

Для номера 3 вы включаете скрытое поле в сценарий CSRF?

Безопасность AntiForgeryToken заключается в том, что скрытый ввод существует только на странице, обслуживаемой вашим доменом, и не может быть скопирован или захвачендругим доменом.Если вы смоделировали тест, который проходит скрытый ввод, тогда это недопустимый тест.

Предлагаю вам прочитать эту статью Фила Хаака: Анатомия атаки подделки межсайтовых запросов

...