【发布时间】:2014-04-24 01:50:07
【问题描述】:
单个 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 没有说只调用一次。
【问题讨论】:
-
请记住,vtortola 的方法会产生安全漏洞,正如我在下面的回答中所解释的那样。令牌必须不同。
标签: asp.net-mvc security asp.net-mvc-4 razor antiforgerytoken