湖南省住建厅官方网站建设干校,摄影网站定位,setnet科技网站建设,网站的制作步骤包括什么是跨站请求伪造跨站请求伪造#xff08;英语#xff1a;Cross-site request forgery#xff09;#xff0c;也被称为 one-click attack 或者 session riding#xff0c;通常缩写为 CSRF 或者 XSRF#xff0c; 是一种挟制用户在当前已登录的Web应用程序上执行非本意的… 什么是跨站请求伪造跨站请求伪造英语Cross-site request forgery也被称为 one-click attack 或者 session riding通常缩写为 CSRF 或者 XSRF 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。【1】 跟跨网站脚本XSS相比XSS 利用的是用户对指定网站的信任CSRF 利用的是网站对用户网页浏览器的信任。想了解更多请查看维基百科上的详细介绍。使用 Asp.Net Core 内置的 AntiforgeryAsp.Net Core 应用中内置了 Microsoft.AspNetCore.Antiforgery 包来支持跨站请求伪造。如果你的应用引用了 Microsoft.AspNetCore.App 包 则就已经包含了 Microsoft.AspNetCore.Antiforgery 。如果没有 则可以使用下面的命令来添加这个包dotnet add package Microsoft.AspNetCore.Antiforgery添加了这个包之后 需要先修改 Startup.cs 文件中的 ConfigureServices 方法 添加下面的配置public class Startup { public void ConfigureServices(IServiceCollection services) { services.AddAntiforgery(options { options.Cookie.SameSite SameSiteMode.Lax; options.HeaderName X-XSRF-TOKEN; }); }}在 SecurityController.cs 文件中添加一个 Api 来颁发凭据[Route(api/[controller])][ApiController]public class SecurityController : Controller { private IAntiforgery antiforgery; public SecurityController( IAntiforgery antiforgery ) { this.antiforgery antiforgery; } [HttpGet(xsrf-token)] public ActionResult GetXsrfToken() { var tokens antiforgery.GetAndStoreTokens(HttpContext); Response.Cookies.Append( XSRF-TOKEN, tokens.RequestToken, new CookieOptions { HttpOnly false, Path /, IsEssential true, SameSite SameSiteMode.Lax } ); return Ok(); }}当客户端请求 ~/api/security/xsrf-token 时 服务端发送两个 Cookie .AspNetCore.Antiforgery.xxxxxx 一个 HTTP Only 的 Cookie 用于服务端验证XSRF-TOKEN 客户端需要将这个 Cookie 的值用 X-XSRF-TOKEN 的 Header 发送回服务端 进行验证注意这两个 Cookie 不支持跨域请求 只能在相同的站点内请求 也是出于安全性方面的考虑。可以为某一个 ApiController 或者 Action 方法单独添加 ValidateAntiForgeryTokenAttribute标记来验证 XSRF-TOKEN 也可以全局注册一个 AutoValidateAntiforgeryTokenAttribute 过滤器来进行自动验证 代码如下public class Startup { public void ConfigureServices( IServiceCollection services, IHostingEnvironment env ) { services.AddMvc(options { if (env.IsProduction()) { options.Filters.Add( new AutoValidateAntiforgeryTokenAttribute() ); } }); }}注意问题不是所有的方法都需要进行 XSRF 认证除了 GET HEAD OPTIONS 和 TRACE 之外的方法才支持 XSRF 认证。Angular 内置支持Angular 的 Http 模块内置支持 XSRF 前提条件如下存在客户端可以操作的名称为 XSRF-TOKEN 的 Cookie 该 Cookie 不能是 HttpOnly 的 否则客户端脚本无法读取该 Cookie 的 Path 必须为 / 这三个条件都满足 则在向服务端请求时自动发送名称为 X-XSRF-TOKEN 的 Header 值则为 XSRF-TOKEN 的 Cookie 的值 这样就回自动满足上面的服务端的设置 实现自动防御跨站请求伪造。原文地址https://beginor.github.io/2019/05/27/anti-forgery-with-asp-net-core-and-angular.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com