web api 和带有 angularjs 的防伪令牌

web api and anitforgery token with angularjs

为了避免 xss 攻击,MVC 生成了一些防伪令牌。

但在我们的项目中,我们有 Angularjs 和网络 api。

我的需求是

防伪令牌是针对 cross-site 请求伪造 (CSRF) 的。简而言之,攻击者可以建立自己的网站,诱使您的用户访问该网站,然后为用户创建一个网页,使用户的浏览器 post 成为有效请求您的应用程序,您的用户不想做的事情。对此的标准保护是在您的应用程序中生成一个攻击者不知道也无法发送的随机令牌。 OWASP 有一个不错的 description of CSRF and also a protection cheat sheet。仅当浏览器随请求自动发送身份验证信息(session id 或访问令牌)时才会出现此问题,即。当它在 cookie 中时。否则无法攻击。

这也与cross-site scripting (xss). An attacker may want to inject Javascript into your page when viewed by other users so that he can access data displayed to or stored on the client by victim users. To solve this, you need to encode all output according to its context, or in Angular (and Javascript in general) you need to make sure that you only use bindings that may not create a script node in the page dom but only bind as text. OWASP has a cheat sheet for XSS无关。

在 Angular 与 Web API 对话的情况下,如果(且仅当)您使用 cookie-based,则需要处理 Web API 代码中的 CSRF ]认证/sessions。如果访问令牌存储在其他任何地方并且您必须将其插入到代码中的每个请求中(例如令牌存储在 Javascript object 中并作为请求添加到每个请求 header by jQuery),没关系,你不需要针对 CSRF 的进一步保护。

如果 Web API 提供 JSON 内容,在 JSON 响应中包含未编码的数据是可以的(显然这意味着您应该为 JSON 本身编码数据,但是标准的序列化程序会为你做这件事,你不需要关心那个级别的表现)。当在 Angular 中收到此类数据时,您需要确保仅使用安全绑定将该数据实际绑定到 UI,以便无法插入 Javascript。 Angular 在这方面相当擅长,但代码仍然容易受到攻击。 DOM XSS(XSS 的一种形式)也是 Javascript-heavy 应用程序中非常常见的漏洞。

不幸的是,具体如何实现这些超出了此处的答案范围。这一切都取决于细节。