c# - 带有 iframe 的弹出窗口:一次使用多个 @Html.AntiForgeryToken()
问题描述
我有一个页面,当加载时会生成一个带有@Html.AntiForgeryToken()
. 这发生在布局文件中。该页面可以打开一些带有 iframe 的弹出窗口。此 iframe 生成自己的防伪令牌,其中包含@Html.AntiForgeryToken()
.
在可以打开弹出窗口的页面上,用户可以注销。注销请求包括加载此页面时生成的防伪令牌。
鉴于我这样做:
- 加载可打开弹窗的页面(生成防伪令牌)
- 使用 iframe 打开一个弹出窗口(在 iframe 中生成一个新的防伪令牌)
- 从我可以打开弹出窗口的页面注销
注销成功。这是为什么?新令牌不会替换服务器上的旧令牌吗?或者我验证的防伪令牌是否存储为浏览器中的 cookie,这样当我通过注销请求传递防伪令牌值时,浏览器也会传递我比较的匹配的防伪令牌 cookie?
我在 ASP.NET 4.5.2 和 MVC 5.2.3 上。
解决方案
好像它被保存在一个cookie中。这不是来自 .NET Core 的文章,尽管它可能在那里以相同的方式工作。
ASP.NET Web Stack 运行时使用同步器令牌模式的变体来防御 XSRF 攻击。同步器令牌模式的一般形式是使用每个 HTTP POST(除了身份验证令牌)将两个反 XSRF 令牌提交给服务器:一个令牌作为 cookie,另一个作为表单值。由 ASP.NET 运行时生成的令牌值不是确定性的,也不是攻击者可预测的。提交令牌后,服务器将仅在两个令牌都通过比较检查时才允许请求继续进行。
推荐阅读
- django - 查询过程中增加prod_price
- java - Android致命异常错误
- python - 从 Transformer/Regressor 中访问 sklearn 管道
- angular - AngularFire Firestore 属性“地图”在“操作”类型上不存在
>' - javascript - 使 document.write 异步
- python - 如何在 Python 中对每列的唯一值求和?
- java - Java 使用 UTF 8 字符存储对象
- javascript - 限制网页上具有屏幕边界的可移动字符
- html - 没有javascript的打印功能
- ios - 捆绑 ID 唯一性的规则是什么?