как ASP.NET проверяет токен анти-подделки

Интересно, как ASP.NET проверяет, является ли токен анти-подделки действительным или нет? Как где ASP.NET хранит эти жетоны? И как они хранятся?

Ответы

Ответ 1

Краткая версия состоит в том, что сгенерированный токен хранится в двух местах: (a) cookie (b) значение скрытой формы. Когда форма отправляется, эти 2 значения сравниваются друг с другом, чтобы определить, являются ли они действительными. Для дальнейшего чтения:

http://www.asp.net/web-api/overview/security/preventing-cross-site-request-forgery-(csrf)-attacks http://www.codeproject.com/Articles/793384/ASP- NET-Anti-Подделка-токены-Внутрикорпусные

Ответ 2

Поэтапное объяснение, более понятное, чем принятый ответ imho (с https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/preventing-cross-site-request-forgery-csrf- атаки)

  1. Клиент запрашивает HTML-страницу, содержащую форму.
  2. Сервер включает в себя два токена. Один токен отправляется как файл cookie. Другой находится в скрытом поле формы. Токены генерируются случайным образом, так что противник не может угадать значения.
  3. Когда клиент отправляет форму, он должен отправить оба токена обратно на сервер. Клиент отправляет токен cookie в качестве файла cookie и отправляет маркер формы внутри данных формы. (Клиент-браузер автоматически выполняет это, когда пользователь отправляет форму.)
  4. Если запрос не включает оба токена, сервер запрещает запрос.

Ответ 3

Вышеприведенное описание - это не все, что сделано, в случае AjaxRequest антифригмент, особенно в запросах на получение, обычно не отправляет форму со скрытым значением для сравнения, вместо этого вам нужно будет установить значение заголовка с тем же содержимым cookie через javascript.. имя заголовка, которое вы должны установить, по умолчанию является заголовком X-XRF-Token [связанным с angularjs]... конечно, вам нужно отключить CORS или включить его только для определенных доменов для защиты API, SAMEORIGIN также необходимо установить, чтобы избегать clickjacking.