如何在控制器中生成防伪 cookie 和令牌
本文关键字:cookie 令牌 控制器 | 更新日期: 2023-09-27 18:34:35
我正在尝试从我的应用程序中伪造请求,但我无法弄清楚如何让防伪位工作。我需要支持一些只能通过 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("'""));
我不确定这是否与防伪饼干可能不正确的事实有关?
你通常会把
@Html.AntiForgeryToken()
在 <form>
元素中,无论是通过纯 HTML 还是 @Html.BeginForm(...)
创建的,然后在控制器中,使用属性 [ValidateAntiForgeryToken]
装饰将接收表单的 POST 提交的方法。
您可以使用AntiForgery.GetTokens((方法生成防伪cookie和表单令牌。传递oldCookieToken
的null
将生成新的 cookie/令牌对。
尝试使用从其他应用中提取的 cookie/令牌对将导致您遇到的The anti-forgery token could not be decrypted.
错误消息。正如@chris所提到的,如果可能的话,这将是一个安全漏洞。