JQuery Ajax вызывает и Html.AntiForgeryToken ()
Я реализовал в своем приложении смягчениеCSRF-атаки следуя информации, которую я прочитал в блоге в Интернете. В частности, этот пост был драйвером моей реализации
Лучшие практики для ASP.NET MVC от команды разработчиков контента для ASP.NET и Web ToolsАнатомия мошенничества с межсайтовым запросом из блога Фила ХаакаAntiForgeryToken в ASP.NET MVC Framework - Атрибут Html.AntiForgeryToken и ValidateAntiForgeryToken из блога Дэвида ХейденаВ основном в этих статьях и рекомендациях говорится, что для предотвращения атаки CSRF любой должен реализовать следующий код:
1) Добавить[ValidateAntiForgeryToken]
на каждое действие, которое принимает глагол POST Http
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult SomeAction( SomeModel model ) {
}
2) Добавить<%= Html.AntiForgeryToken() %>
помощник внутри форм, который передает данные на сервер
<div style="text-align:right; padding: 8px;">
<%= Html.AntiForgeryToken() %>
<input type="submit" id="btnSave" value="Save" />
</div>
Во всяком случае, в некоторых частях моего приложения я выполняю Ajax POST с jQuery на сервере, не имея вообще никакой формы. Это происходит, например, когда я позволяю пользователю нажимать на изображение, чтобы выполнить определенное действие.
Предположим, у меня есть таблица со списком мероприятий. У меня есть изображение в столбце таблицы с надписью «Пометить активность как выполненную», и когда пользователь нажимает на эту операцию, я выполняю Ajax POST, как в следующем примере:
$("a.markAsDone").click(function (event) {
event.preventDefault();
$.ajax({
type: "post",
dataType: "html",
url: $(this).attr("rel"),
data: {},
success: function (response) {
// ....
}
});
});
Как я могу использовать<%= Html.AntiForgeryToken() %>
в этих случаях? Должен ли я включить вспомогательный вызов в параметр данных вызова Ajax?
Извините за длинный пост и большое спасибо за помощь
РЕДАКТИРОВАТЬ:
Согласноjayrdub ответ я использовал следующим образом
$("a.markAsDone").click(function (event) {
event.preventDefault();
$.ajax({
type: "post",
dataType: "html",
url: $(this).attr("rel"),
data: {
AddAntiForgeryToken({}),
id: parseInt($(this).attr("title"))
},
success: function (response) {
// ....
}
});
});