Я реализовал в своем приложении защиту от CSRF-атак , следуя информации, которую я прочитал в некоторых постах в блогах в Интернете. В частности эти посты были драйвером моей реализации
В основном в этих статьях и рекомендациях говорится, что для предотвращения атаки 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>
Во всяком случае, в некоторых частях моего приложения я выполняю POST Ajax с 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() %>
в этих случаях? Должен ли я включить вспомогательный вызов в параметр data вызова Ajax?
Извините за длинный пост и большое спасибо за помощь
EDIT
Согласно 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) {
// ....
}
});
});