在 ASP.NET Core Web 应用程序中,防止跨站请求伪造(CSRF)攻击的一种方式是使用 antiforgery 服务。
此服务可以通过在应用程序的 startup.cs 文件中的 ConfigureServices 方法中添加以下代码来配置:
services.AddAntiforgery(options =>
{
options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
options.HeaderName = "X-CSRF-TOKEN";
options.SuppressXFrameOptionsHeader = false;
});
然后,将以下代码添加到要保护的表单中:
然后,在控制器的 POST action 方法中使用 [ValidateAntiForgeryToken] 标记:
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Index(IndexViewModel model)
{
// ...
}
这样,防止 CSRF 攻击的 antiforgery 服务就会自动为表单生成令牌,并在提交表单时验证表单中的令牌与 cookie 中的令牌是否匹配。
如果你需要在 Ajax 调用中使用 antiforgery 服务,则可以使用以下代码:
$.ajax({
type: "POST",
url: url,
beforeSend: function (xhr) {
xhr.setRequestHeader("X-CSRF-TOKEN",
$('input:hidden[name="__RequestVerificationToken"]').val());
},
data: data
});