外部跨域包含脚本

信息安全 Web应用程序 网页浏览器 漏洞扫描器 网站 跨域
2021-08-18 14:24:19

我的一个 Web 应用程序最近进行了漏洞评估,其中一项发现是关于跨域包含脚本的。我们的网络应用程序使用AddThis中的 addthis_widget.js 来为 Facebook/Twitter 等添加书签。建议我们将脚本的内容复制到我们自己的域中并从那里包含它,或者在我们自己的代码中重新实现脚本的功能。

这真的是一个可利用的问题吗?

3个回答

如果代码由大型内容交付网络 (CDN) 提供服务,例如 Google 的 CDN,那么您很可能会通过其他方式被黑客入侵。大型 CDN 有很多钱可以花在安全上,而且 CDN 不太可能成为您自己基础设施的弱点。

一旦网站达到一定的受欢迎程度,它就需要从 CDN 提供静态内容。考虑以下帖子:

为什么我应该为 jQuery 使用 Google 的 CDN?

CDN 带来的好处超过了破坏分发静态内容的维护良好的服务器的极不可能的可能性。话虽如此, 我在 Akamai 产品中发现了一个重大缺陷......

是的,这是一个安全问题。

包含的 JavaScript 在您的网站上下文中运行,这意味着它可以控制您可以控制的任何内容。

外部 JavaScript 文件可能会通过以下方式伤害您:

  • 读取 cookie(例如窃取会话)
  • 读取用户输入(例如读取密码输入)
  • 更改用户看到的内容(例如显示广告、网络钓鱼、污损)
  • 以用户身份执行表单(例如更改用户信息,向其他用户发送垃圾邮件)
  • 向其他服务器执行请求(例如,将获取的信息发送到攻击者服务器,对其他服务器执行 DOS/暴力攻击等)

因此,您应该仅在以下情况下包含外部 JavaScript 文件

  • 您相信您所包含的域/公司不会伤害您
  • 您相信他们会确保他们的服务器安全
  • 您使用 HTTPS 进行包含以避免中间人攻击

当然,从外部服务器包含 JavaScript有好处

  • 您的服务器上的负载将减少
  • 用户可能已经缓存了该文件,因此网站将为您的用户加载更快。

包含来自其他站点的脚本的主要问题是他们(甚至是入侵其服务器的人)可能会修改脚本以包含恶意代码。

现在你有 2 个选项有相当大的“缺点”:

  1. 重新实现 addthis 脚本将非常耗时,因此,我认为您不想那样做。此外,您还必须维护脚本。
  2. 如果您将副本复制到您的服务器,您需要知道 AddThis 团队更新了该脚本,并且您必须检查您是否有旧版本然后更新它(您必须手动进行,因为您没有知道是否有坏东西插入其中)。

老实说,我会坚持包括 AddThis 脚本(来自他们的服务器),但是,你有一个安全顾问为你工作......与他讨论 3 个选项以及你看到的每个选项的缺点(重新实现、跨域、复制到你的服务器)。