首页 > 解决方案 > 带有 iframe 的弹出窗口:一次使用多个 @Html.AntiForgeryToken()

问题描述

我有一个页面,当加载时会生成一个带有@Html.AntiForgeryToken(). 这发生在布局文件中。该页面可以打开一些带有 iframe 的弹出窗口。此 iframe 生成自己的防伪令牌,其中包含@Html.AntiForgeryToken().

在可以打开弹出窗口的页面上,用户可以注销。注销请求包括加载此页面时生成的防伪令牌。

鉴于我这样做:

注销成功。这是为什么?新令牌不会替换服务器上的旧令牌吗?或者我验证的防伪令牌是否存储为浏览器中的 cookie,这样当我通过注销请求传递防伪令牌值时,浏览器也会传递我比较的匹配的防伪令牌 cookie?

我在 ASP.NET 4.5.2 和 MVC 5.2.3 上。

标签: c#asp.netasp.net-mvcsecurityantiforgerytoken

解决方案


好像它被保存在一个cookie中。不是来自 .NET Core 的文章,尽管它可能在那里以相同的方式工作。

ASP.NET Web Stack 运行时使用同步器令牌模式的变体来防御 XSRF 攻击。同步器令牌模式的一般形式是使用每个 HTTP POST(除了身份验证令牌)将两个反 XSRF 令牌提交给服务器:一个令牌作为 cookie,另一个作为表单值。由 ASP.NET 运行时生成的令牌值不是确定性的,也不是攻击者可预测的。提交令牌后,服务器将仅在两个令牌都通过比较检查时才允许请求继续进行。


推荐阅读