Как расширить или переопределить BeginForm, чтобы включить поле AntiForgeryToken - PullRequest
13 голосов
/ 02 июля 2011

Я читал эту статью (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, чтобы создать BeginSecureForm, который автоматически добавляет AntiForgeryToken. Я не уверен, как добавить содержимое между BeginForm и EndForm.

Есть идеи?

1 Ответ

17 голосов
/ 15 декабря 2011

Вы должны использовать это вместо этого, чтобы поместить токен в нужное место после формы:

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