如何扩展或覆盖BeginForm以包含AntiForgeryToken字段

时间:2011-07-01 20:18:30

标签: security asp.net-mvc-3 dry csrf

我正在阅读这篇文章(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之间添加内容。

有什么想法吗?

1 个答案:

答案 0 :(得分:17)

您应该使用此代码,将令牌放在表格后面的正确位置:

public static MvcForm BeginAntiForgeryForm(this HtmlHelper htmlHelper)
    {
        var mvcForm = htmlHelper.BeginForm();
        htmlHelper.ViewContext.Writer.Write(htmlHelper.AntiForgeryToken().ToHtmlString());
        return mvcForm;
    }