ASP.NET如何验证防伪令牌

Ste*_*eve 17 asp.net security xss antiforgerytoken

我想知道ASP.NET如何检查防伪令牌是否有效?像存储这些令牌的ASP.NET在哪里?它们是如何存储的?

Tea*_*Tam 25

简短版本是生成的令牌存储在2个位置:(a)cookie(b)隐藏的表单值.提交表单时,将这两个值相互比较以确定它们是否有效.进一步阅读:

http://www.asp.net/web-api/overview/security/preventing-cross-site-request-forgery-(csrf)-attacks http://www.codeproject.com/Articles/793384/ASP-NET -防伪造令牌,内部

  • 实际上生成了两个令牌.不只是存储在两个地方的一个. (3认同)

Chi*_*nke 13

逐步解释比接受的答案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. 如果请求不包含两个令牌,则服务器不允许该请求.