【问题标题】:web api and anitforgery token with angularjs带有 angularjs 的 web api 和 anitforgery 令牌
【发布时间】:2017-03-10 02:44:34
【问题描述】:

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

但在我们的项目中,我们有带有 web api 的 Angularjs。

我的需要是

  • 我们是否需要防伪令牌来防止 Angularjs 项目使用 web api 进行 xss 攻击?
  • 如果需要,如何实现?

【问题讨论】:

    标签: angularjs security asp.net-web-api xss antiforgerytoken


    【解决方案1】:

    防伪令牌用于防止跨站请求伪造 (CSRF)。简而言之,攻击者可能能够建立自己的网站,诱骗您的用户访问该网站,然后为用户创建一个网页,使用户的浏览器向您的应用程序发布有效请求,例如你的用户不想做。针对这种情况的标准保护措施是在您的应用程序中生成一个攻击者不知道也无法发送的随机令牌。 OWASP 有一个不错的 description of CSRF 和一个 protection cheat sheet。仅当浏览器通过请求自动发送身份验证信息(会话 ID 或访问令牌)时才会出现此问题,即。当它在 cookie 中时。否则攻击是不可能的。

    这与cross-site scripting (xss) 无关。攻击者可能希望在其他用户查看时将 Javascript 注入您的页面,以便他可以访问受害用户显示或存储在客户端上的数据。为了解决这个问题,您需要根据其上下文对所有输出进行编码,或者在 Angular(和一般的 Javascript)中,您需要确保仅使用可能不会在页面 dom 中创建脚本节点但仅绑定为文本的绑定. OWASP 也有一个cheat sheet for XSS

    在 Angular 与 Web API 通信的情况下,当(且仅当)您使用基于 cookie 的身份验证/会话时,您需要在 Web API 代码中处理 CSRF。如果访问令牌存储在其他任何地方,并且您必须将其插入到代码中的每个请求中(例如,令牌存储在 Javascript 对象中并通过 jQuery 作为请求标头添加到每个请求中),这很好,你不要'不需要针对 CSRF 的进一步保护。

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

    不幸的是,如何准确地实现这些远远超出了这里的答案范围。这一切都取决于细节。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-20
      • 2014-10-05
      • 2014-02-25
      • 2015-02-08
      • 2015-06-02
      • 2018-07-18
      • 1970-01-01
      • 2014-02-10
      相关资源
      最近更新 更多