我想知道ASP.NET如何检查防伪令牌是否有效?像存储这些令牌的ASP.NET在哪里?它们是如何存储的?
答案 0 :(得分: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-Anti-Forgery-Tokens-internals
答案 1 :(得分:11)
逐步解释比接受的答案imho(来自https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/preventing-cross-site-request-forgery-csrf-attacks)
更清晰答案 2 :(得分:2)
上面的描述并不是全部所做的,在AjaxRequest的情况下,反伪造,特别是在get请求中,通常不会发送带有隐藏值的Form进行比较,而是需要设置一个具有相同的头值。通过javascript的cookie的内容..您应该设置的标题名称默认为X-XRF-Token标头[与angularjs相关] ...当然,您需要禁用CORS或仅为特定域启用它以保护API,SAMEORIGIN也需要设置以避免点击劫持..