在ASP.NET Core中,可以使用Antiforgery中间件来提供XSRF/CSRF保护。下面是一个示例解决方案:
Startup.cs文件中添加以下代码以启用Antiforgery中间件:using Microsoft.AspNetCore.Antiforgery;
// ...
public void ConfigureServices(IServiceCollection services)
{
services.AddAntiforgery(options => options.HeaderName = "X-XSRF-TOKEN");
// ...
}
public void Configure(IApplicationBuilder app, IAntiforgery antiforgery)
{
app.Use(next => context =>
{
string path = context.Request.Path.Value;
if (string.Equals(path, "/", StringComparison.OrdinalIgnoreCase) ||
string.Equals(path, "/index.html", StringComparison.OrdinalIgnoreCase))
{
// Send the request token as a JavaScript-readable cookie
var tokens = antiforgery.GetAndStoreTokens(context);
context.Response.Cookies.Append("XSRF-TOKEN", tokens.RequestToken,
new CookieOptions() { HttpOnly = false });
}
return next(context);
});
// ...
}
@inject Microsoft.AspNetCore.Antiforgery.IAntiforgery Antiforgery
@section Scripts {
}
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
// Validate the XSRF token
if (!HttpContext.Request.Cookies.TryGetValue("XSRF-TOKEN", out string token) ||
!Antiforgery.ValidateRequestAsync(HttpContext).GetAwaiter().GetResult())
{
return BadRequest("Invalid XSRF token");
}
// Process the registration
return RedirectToAction("Login");
}
return View(model);
}
以上代码中,XSRF令牌在登录或注册页面中作为隐藏的输入字段发送,并在AJAX请求的头部中包含该令牌。服务器端验证XSRF令牌的有效性,确保请求是合法的。
请注意,上述示例仅用于说明如何在ASP.NET Core中实现XSRF/CSRF保护,实际应用中可能需要根据具体需求进行适当的调整。