我对反 CRSF MVC 机制有疑问。返回的 cookie 和表单输入不匹配。我每次都收到错误,仅在一个特定页面中。在应用程序的其余部分中,它运行良好。
服务器正在返回HTTP 500 Internal Server Error
,我可以在日志中看到这个异常:
[System.Web.Mvc.HttpAntiForgeryException]:{“未提供所需的防伪令牌或无效。”}
这是服务器生成的隐藏输入:
<input name="__RequestVerificationToken" type="hidden" value="QK8P7rjyZE6Vm5seY7Fr704YCOoFGdTIMzl1W7R0ZFpXSMjGKLG2T05DfFSYTxvtQCEx7DDT69DGsDB2+ZXFHY8oAjiKz0gw8BhDFywgmfIpoXnGpj7fONNzIIfvbrDrE9WJsMu6Io/0bDLM5WfKs0zktiNjyOWpfYrmnfINYmjW8NLOZFoz74xTcgTptAld">
这是返回的 Cookie:
Set-Cookie:__RequestVerificationToken_L2VGbG93=skmTAVI8HCbfxDS+xhioIMIISL3UOBI7qJM1JbHjTtAqKl4W70pDUcTKMm0p3R3mrHDziE8vXw0C0OO4HArzWO1/e6py+v/cFdbe9maFgjl4jMiZ9Wc4YIhC6+IUXkk6yqJDJ8dCIr8qtGaYcD9IX+m7/SlVhu521KQSWJYRcaY=; path=/; HttpOnly
当我检查服务器发送的内容时,cookie 完全相同,但我认为有效负载具有不同的编码:
__RequestVerificationToken:QK8P7rjyZE6Vm5seY7Fr704YCOoFGdTIMzl1W7R0ZFpXSMjGKLG2T05DfFSYTxvtQCEx7DDT69DGsDB2%2BZXFHY8oAjiKz0gw8BhDFywgmfIpoXnGpj7fONNzIIfvbrDrE9WJsMu6Io%2F0bDLM5WfKs0zktiNjyOWpfYrmnfINYmjW8NLOZFoz74xTcgTptAld
区别在于出现编码的两个字符:
/ -> %2F
+ -> %2B
这些是我能找到的隐藏输入字段和后有效载荷之间的唯一区别。
ValidateAntiForgeryToken
导致验证令牌失败的问题可能是什么?
问候。