Подтвердить что ты не робот

Как расширить или переопределить BeginForm, чтобы включить поле AntiForgeryToken

Я читал эту статью (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.

Любые идеи?

4b9b3361

Ответ 1

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

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