// 添加Antiforgery服务 services.AddAntiforgery(options => { options.HeaderName = "X-CSRF-TOKEN"; });
在Login页面添加AntiForgeryToken:
@inject Microsoft.AspNetCore.Antiforgery.IAntiforgery Xsrf
在Login页面提交时进行验证:
@inject Microsoft.AspNetCore.Antiforgery.IAntiforgery Xsrf @inject Microsoft.AspNetCore.Http.IHttpContextAccessor HttpContextAccessor
protected override void OnInitialized() { // 查询当前的cookie并在页面中设置antiforgery token CurrentToken = Xsrf.GetAndStoreTokens(HttpContextAccessor.HttpContext); }
private async Task HandleSubmit() { // 将从表单提交中提取的令牌值与cookie中的令牌值进行比较 string xsrfToken; HttpContext.Request.Form.TryGetValue("xsrf_token", out xsrfToken); if (await Xsrf.IsRequestValidAsync(HttpContext, xsrfToken)) { // 处理表单提交 } else { // 验证失败,跳转到错误页面 } }
// 添加点击劫持头 app.Use(async (context, next) => { context.Response.Headers.Add("X-Frame-Options", "DENY"); await next(); });