加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 为什么@ Html.AntiForgeryToken()在同一个响应中

发布时间:2020-12-16 00:06:32 所属栏目:asp.Net 来源:网络整理
导读:单个Razor视图包含多个表单,每个表单都有自己对@ Html.AntiForgeryToken()的调用 form id="f1" @Html.AntiForgeryToken()/formform id="f2" @Html.AntiForgeryToken()/form 据我了解,这两种防伪标记应该是相同的. form id="f1" input name="__RequestVerific
单个Razor视图包含多个表单,每个表单都有自己对@ Html.AntiForgeryToken()的调用
<form id="f1">
    @Html.AntiForgeryToken()
</form>

<form id="f2">
    @Html.AntiForgeryToken()
</form>

据我了解,这两种防伪标记应该是相同的.

<form id="f1">
    <input name="__RequestVerificationToken" type="hidden" value="duVT4VtiYybun-61lnSY1ol__qBwawnELooyqT5OSrCJrvcHvDs_Nr9GLxNxwvBaI4hUcKZVkm6mDEmH2UqNorHD1FnJbKJQLWe8Su_dhy_nnGGl5GhqqC3yRGzcxbBM0" />
</form>

<form id="f2">
    <input name="__RequestVerificationToken" type="hidden" value="ZMISz3IWHU_HCKP4FppDQ5lvzoYhlQGhN1cmzKBPz4OgDzyqSUK3Q1dqvw1uHsb4eNyd9U3AbFcnW8tR7g1QS8Dyhp0tFc-ee1sfDAOqbLCcgd3PDnLCbXx09pnPREaq0" />
</form>

为什么价值不同?

当然它们应该是相同的,因为它们是从服务器发送的相同响应中的?
documentation没有说只召唤一次.

解决方法

Anti-Forgery令牌不会直接进行比较 – 服务器必须先取消保护它并比较内部的受保护数据.拥有不同的受保护令牌并不一定意味着它们包含不同的数据.

System.Web.Helpers.AntiXsrf.TokenValidator比较的是解密的AntiForgeryToken实例中的SecurityToken.但是,这些实例还包含AdditionalData字段,UserName字段和ClaimUid字段.

此外,AntiForgeryToken中的SecurityToken直接从AntiForgeryWorker中的(当前有效,否则是新生成的)AntiForgery cookie中复制.

鉴于所有数据都是序列化,加密然后编码,由于令牌之间的AdditionalData之间存在差异,因此受保护令牌可能存在差异,或者可能是由于加密过程中使用的伪随机数(由于我可能使用)可以测试2个完全不同的令牌对同一个cookie有效).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读