2011-07-01 52 views
12

我正在阅读有关如何防止CSRF攻击的文章(http://weblogs.asp.net/dixin/archive/2010/05/22/anti-forgery-request-recipes-for-asp-net-mvc-and-ajax.aspx)。似乎解决方案是在每个表单中创建一个标签。如何扩展或覆盖BeginForm以包含AntiForgeryToken字段

<%: this.Html.AntiForgeryToken(Constants.AntiForgeryTokenSalt)%> 

但是,我真的不想复制和粘贴每个表单内的代码。我想扩展或覆盖BeginForm来创建一个自动添加AntiForgeryToken的BeginSecureForm。我不确定如何在BeginForm和EndForm之间添加内容。

任何想法?

+0

+1大家帮我解决了一个隐约相关的问题。 –

回答

18

您应该改用此,放置令牌在正确的地方,在表格后:

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