我正在尝试从我的应用程序中伪造一个请求,但我无法弄清楚如何使这个反伪造工作起作用。我需要支持一些只能通过Web请求调用的遗留代码。
我已经能够通过伪造HtmlHelper从控制器获取一个令牌但是当它试图验证它时它给了我这个例外:
无法解密防伪令牌。如果此应用程序由Web场或群集托管,请确保所有计算机都运行相同版本的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可能不正确有关?
答案 0 :(得分:1)
您可以使用方法AntiForgery.GetTokens()生成防伪cookie和表单令牌。为null
传递oldCookieToken
会生成一个新的cookie /令牌对。
尝试使用从另一个应用程序提取的cookie /令牌对将导致您遇到The anti-forgery token could not be decrypted.
错误消息。如@chris所述,如果可能的话,这将是一个安全漏洞。
答案 1 :(得分:0)
你通常会放置
@Html.AntiForgeryToken()
在<form>
元素中,无论是通过纯HTML还是@Html.BeginForm(...)
创建,然后在Controller中,装饰将接收带有属性{{1}的表单的POST提交的方法}。