как 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- атаки)
- Клиент запрашивает HTML-страницу, содержащую форму.
- Сервер включает в себя два токена. Один токен отправляется как файл cookie. Другой находится в скрытом поле формы. Токены генерируются случайным образом, так что противник не может угадать значения.
- Когда клиент отправляет форму, он должен отправить оба токена обратно на сервер. Клиент отправляет токен cookie в качестве файла cookie и отправляет маркер формы внутри данных формы. (Клиент-браузер автоматически выполняет это, когда пользователь отправляет форму.)
- Если запрос не включает оба токена, сервер запрещает запрос.
Ответ 3
Вышеприведенное описание - это не все, что сделано, в случае AjaxRequest антифригмент, особенно в запросах на получение, обычно не отправляет форму со скрытым значением для сравнения, вместо этого вам нужно будет установить значение заголовка с тем же содержимым cookie через javascript.. имя заголовка, которое вы должны установить, по умолчанию является заголовком X-XRF-Token [связанным с angularjs]... конечно, вам нужно отключить CORS или включить его только для определенных доменов для защиты API, SAMEORIGIN также необходимо установить, чтобы избегать clickjacking.