@ Html.AntiForgeryToken()
呈现隐藏的输入
呈现隐藏的输入
<input name="__RequestVerificationToken" type="hidden" value="GuiNIwhIJZjINHhuS_8FenaFDXIiaE" />
public static IHtmlString AntiForgeryTokenValue(this HtmlHelper htmlHelper) { var field = htmlHelper.AntiForgeryToken().ToHtmlString(); var beginIndex = field.IndexOf("value=\"") + 7; var endindex = field.IndexOf("\"",beginIndex); return new HtmlString(field.Substring(beginIndex,endindex - beginIndex)); }
解决方法
MVC的反CSRF功能实际上取决于两个令牌:一个是隐藏的表单元素,另一个是cookie。所以Html.AntiForgeryToken()帮助器不只是返回一个HTML片段。它也有一个副作用设置这个cookie。请注意,cookie值和表单值不相等,因为它们各自编码不同的信息。
如果您使用AntiForgery.GetTokens API,则此方法将返回原始令牌,而不是生成HTML代码段。该方法的参数有:
> oldCookietoken:如果请求已经包含反CSRF cookie令牌,请在此处提供。此参数可能为null。
> newCookietoken(out参数):如果oldCookietoken为null或没有表示有效的反CSRF cookie令牌,则此参数将使用您应该放在响应cookie中的值来填充。如果oldCookietoken表示一个有效的反CSRF令牌,那么当该方法返回时,newCookietoken将包含null,并且您不必设置响应cookie。
> formToken(out参数):当返回到服务器时,此参数将使用表单体中应该存在的令牌来填充。这是在调用Html.AntiForgeryToken()时最终被隐藏的输入元素包装的值。
如果您使用此API手动生成cookie和表单令牌,则需要调用AntiForgery.Validate的the corresponding overload才能验证令牌。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。