Использование AntiCSRF с ajax - PullRequest
2 голосов
/ 02 мая 2011

Я установил AntiCSRF HTTPModule, но мне нужно использовать его с ajax.
Имя поля токена: RaiseException.
CookieName: __CSRFCOOKIE.
Должен ли я отправлять значение поля токена вручную с помощью ajax POST или что-то еще нужно сделать?
И так как мы используем здесь cookie, никто не может создать cookie с тем же именем и тем же значением и отправить значение, которое появляется в скрытом поле, на сервер и получить данные, или есть некоторые ограничения по этому поводу.?!
Спасибо

1 Ответ

0 голосов
/ 27 апреля 2012

Я не знаком с конкретным модулем анти-CSRF, который вы используете. В ASP.Net встроена поддержка анти-CSRF, но она борется с AJAX.

На большинстве сайтов для аутентификации используется защищенный HTTP-файл cookie. Все браузеры поддерживают одинаковую политику происхождения , что означает, что только сайт, который создает cookie, может получить к нему доступ.

Атака CSRF работает, потому что хакеру не нужно видеть куки, так как браузер пользователя отправит их вместе с любым запросом на ваш сайт. Таким образом, хакер создает форму, которая отправляет данные на ваш сайт:

<form action="yoursite.com/userAdmin/Create">
    <input type="text" name="username" value="hackerUser" />
    <input type="text" name="rights" value="godlike" />
    ...
</form>

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

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

Таким образом, реализация .Net по умолчанию добавляет cookie с токеном, таким же токеном в скрытом вводе, а затем проверяет их соответствие. Хакер не может видеть cookie, поэтому не может воспроизвести скрытый ввод.

Это проблема для вызовов AJAX по двум причинам:

  • .Net генерирует токен как скрытый входной тег, что означает, что для его передачи в вызов AJAX требуется некоторый Javascript.
  • Проверка .Net против токена предполагает, что это ввод формы, то есть вызовы JSON передают его в неправильном формате.

Похоже, вам нужно вручную добавить значение имени поля вашего токена в вызов AJAX и убедиться, что вы отправляете данные формы.

...