如何在控制器中生成防伪 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("'""));

我不确定这是否与防伪饼干可能不正确的事实有关?

如何在控制器中生成防伪 cookie 和令牌

你通常会把

@Html.AntiForgeryToken()

<form> 元素中,无论是通过纯 HTML 还是 @Html.BeginForm(...) 创建的,然后在控制器中,使用属性 [ValidateAntiForgeryToken] 装饰将接收表单的 POST 提交的方法。

您可以使用AntiForgery.GetTokens((方法生成防伪cookie和表单令牌。传递oldCookieTokennull将生成新的 cookie/令牌对。

尝试使用从其他应用中提取的 cookie/令牌对将导致您遇到的The anti-forgery token could not be decrypted.错误消息。正如@chris所提到的,如果可能的话,这将是一个安全漏洞。