我试图在我的应用程序中伪造一个请求,但我不知道如何让它的防伪性发挥作用。我需要支持一些遗留代码,这些代码只能通过web请求来调用。
我已经能够通过伪造HtmlHelper从控制器获得一个令牌,但是当它试图验证它时,它给了我这个异常:
无法解密防伪令牌。如果此应用程序由网络场或群集承载,请确保所有计算机都运行相同版本的ASP.NET网页,并且配置指定了显式加密和验证密钥。
生成令牌的代码:
var antiForgeryTokenField = new HtmlHelper(new ViewContext(), new ViewPage()).AntiForgeryToken().ToString();
var intermediate = antiForgeryTokenField.Substring(antiForgeryTokenField.IndexOf("value=\"") + 8);
var token = intermediate.Substring(0, intermediate.IndexOf("\""));我不确定这是否与防伪cookie可能不正确有关?
发布于 2014-12-19 04:04:51
你通常会把
@Html.AntiForgeryToken()在<form>元素中,无论是通过纯HTML还是@Html.BeginForm(...)创建的,然后在控制器中,使用[ValidateAntiForgeryToken]属性装饰将接收表单提交后的方法。
发布于 2020-05-19 14:08:04
您可以使用AntiForgery.GetTokens()方法生成防伪cookie和表单令牌。传递oldCookieToken的null将生成新的cookie/令牌对。
尝试使用从另一个应用程序提取的cookie/令牌对将导致您遇到的The anti-forgery token could not be decrypted.错误消息。正如@chris提到的,如果这是可能的,这将是一个安全漏洞。
https://stackoverflow.com/questions/27554179
复制相似问题