Dej*_*jan 16 csrf asp.net-core asp.net-core-webapi
我正在使用 ASP.NET Core 实现 REST API。除了使用 cookie 进行身份验证之外,它是无状态的,因此容易受到跨站点请求伪造 (CSRF) 攻击。
幸运的是,ASP.NET Core 提供了一种保护措施:防止ASP.NET Core 中的跨站点请求伪造 (XSRF/CSRF) 攻击。
由于我的应用程序没有任何视图或页面,我只是services.AddControllers()在我的Startup.
当点击归因于 的 REST 端点时[ValidateAntiForgeryToken],我收到以下异常:
System.InvalidOperationException: 没有注册“Microsoft.AspNetCore.Mvc.ViewFeatures.Filters.ValidateAntiforgeryTokenAuthorizationFilter”类型的服务。
使用注册我的控制器services.AddControllersWithViews()会使这个错误消失,因为它在内部注册了适当的服务。
根据文档:
当在 Startup.ConfigureServices 中调用以下 API 之一时,防伪中间件被添加到依赖注入容器中:
添加MVC
MapRazorPages
地图控制器路由
MapBlazorHub
所有这些方法在我看来都是以视图为中心的(除了MapControllerRoute我Configure在我的方法中做的Startup但它没有帮助),并且缺少服务的一部分命名空间是ViewFeatures. 这让我感到困惑,因为在我的理解中,尽管我正在开发一个没有视图的纯 Web API,但需要处理 CSRF。
我的理解有误吗?不涉及视图时如何配置CSRF保护?
我建议放弃默认的 ValidateAntiForgeryToken 属性
所有困难的工作都是由 services.AddAntiforgery() 完成,而 ValidateAntiForgeryToken 只需调用 antiforgery.ValidateRequestAsync()
您可以为其创建自己的过滤器并注册它等。但看看这个简洁的实现,您可以简单地在所有 POST api 方法中注入 IAntiforgery 的实例
| 归档时间: |
|
| 查看次数: |
655 次 |
| 最近记录: |