我正在阅读这篇文章(http://weblogs.asp.net/dixin/archive/2010/05/22/anti-forgery-request-recipes-for-asp-net-mvc-and-ajax.aspx),了解如何防止CSRF攻击。似乎解决方案是在每个表单中创建一个标记。
<%: this.Html.AntiForgeryToken(Constants.AntiForgeryTokenSalt)%>
但是,我真的不想在每个表单中复制并粘贴该代码。我想扩展或覆盖BeginForm以创建一个自动添加AntiForgeryToken的BeginSecureForm。我不确定如何在BeginForm和EndForm之间添加内容。
有什么想法吗?
答案 0 :(得分:17)
您应该使用此代码,将令牌放在表格后面的正确位置:
public static MvcForm BeginAntiForgeryForm(this HtmlHelper htmlHelper)
{
var mvcForm = htmlHelper.BeginForm();
htmlHelper.ViewContext.Writer.Write(htmlHelper.AntiForgeryToken().ToHtmlString());
return mvcForm;
}