asp.net-mvc – 为什么@ Html.AntiForgeryToken()在同一个响应中生成不同的标记?

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – 为什么@ Html.AntiForgeryToken()在同一个响应中生成不同的标记?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
单个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有效).

原文链接:https://www.f2er.com/aspnet/251459.html

猜你在找的asp.Net相关文章