Как расширить или переопределить 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.
Любые идеи?
Ответы
Ответ 1
Вы должны использовать это вместо этого, чтобы поместить маркер в нужное место, после формы:
public static MvcForm BeginAntiForgeryForm(this HtmlHelper htmlHelper)
{
var mvcForm = htmlHelper.BeginForm();
htmlHelper.ViewContext.Writer.Write(htmlHelper.AntiForgeryToken().ToHtmlString());
return mvcForm;
}