我有一个由 ASP.NET MVC 应用程序托管的 AngularJS 单页面应用程序(SPA) .
后端是 ASP.NET Web Api .
我想通过在 ASP.NET MVC 部分生成 AntiForgeryToken
,将其传递给 AngularJS ,然后让 Web Api 验证从后续 AngularJS 调用中收到的 AntiForgeryToken
来保护它免受 CSRF 攻击 .
“跨站点请求伪造(CSRF)是一种攻击,迫使最终用户在其当前已通过身份验证的Web应用程序上执行不需要的操作 . CSRF攻击专门针对状态更改请求,而不是数据被盗,因为攻击者无法查看对伪造请求的响应 . 通过社交工程的一些帮助(例如通过电子邮件或聊天发送链接),攻击者可以欺骗Web应用程序的用户执行攻击者选择的操作 . 如果受害者是普通用户,则成功的CSRF攻击可以强制用户执行状态更改请求,例如转移资金,更改其电子邮件地址等 . 如果受害者是管理帐户,CSRF可能会损害整个Web应用程序 . “ - 打开Web应用程序安全项目(OWASP)
3 回答
将__RequestVerificationToken添加到FormData
或者,如果您不希望全局添加此过滤器,则只能将其放在某些Web API操作上,如下所示
当然,这在定义上不太安全,因为总是有可能忘记将属性应用于需要它的动作 .
另请注意,您必须拥有
Microsoft.AspNet.WebApi.Core
包才能访问System.Web.Http
名称空间 . 您可以通过NuGet与Install-Package Microsoft.AspNet.WebApi.Core
安装它 .这篇文章受到this blog post的启发 .
和Asp.NET MVC控制器抛出 The required anti-forgery form field “__RequestVerificationToken” is not present 错误 .
和Asp.NET MVC控制器可以识别令牌而不会出现任何错误 .