Я не знаком с конкретным модулем анти-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 и убедиться, что вы отправляете данные формы.