便利背后的危险:揭示第三方 JavaScript 引入与缓存所带来的急剧放大的安全风险

《ACM Transactions on Privacy and Security》:The Danger of Convenience: Unveiling the Explosively Amplified Security Risks Posed by Third-Party JavaScript Inclusion and Caching

【字体: 大 中 小 】 时间:2026年09月08日 来源:ACM Transactions on Privacy and Security 4.0

编辑推荐:

   摘要 当今的Web应用程序普遍引入了大量的第三方JavaScript库,这引发了一系列安全风险。尽管针对通过操纵第三方JavaScript文件实施攻击的策略已被广泛研究,但第三方JavaScript引入和缓存所造成的不利影响却鲜受关注。具体来说,当一个恶意脚本被缓存后,每次

  

摘要

当今的Web应用程序普遍引入了大量的第三方JavaScript库,这引发了一系列安全风险。尽管针对通过操纵第三方JavaScript文件实施攻击的策略已被广泛研究,但第三方JavaScript引入和缓存所造成的不利影响却鲜受关注。具体来说,当一个恶意脚本被缓存后,每次用户访问任何包含该脚本的网站时,它都会被重新激活并发起攻击,从而使攻击效果更加严重。本文首次对Alexa排名前100万的网站进行了全面研究,调查第三方JavaScript引入和缓存使攻击大规模化和持久化的可能性,并进一步揭示了那些疏忽或无意中加剧攻击影响的不安全实践。我们在Chromium之上开发了一套定制化工具包,并构建了三种树结构来捕获网站与第三方JavaScript文件之间复杂的引入关系。同时,我们提出了一种时间边界技术,以准确估计JavaScript文件的缓存持续时间。研究结果表明,大量网站忽视了不利影响,对第三方JavaScript引入和缓存控制设置不够重视。我们还讨论了潜在的解决方案,以改进当前实践,从而最小化与第三方JavaScript引入和缓存相关的安全风险。

1 引言

在互联网上,网站引入第三方JavaScript库已成为一种常见且便捷的做法。许多服务提供商,如jQuery[2]、Google Analytics[3]以及各种广告和社交网络平台,创建并提供第三方JavaScript库供互联网使用。因此,Web开发人员可以通过在网站上简单地引入第三方JavaScript库来减少开发时间并丰富网站内容,以提供扩展功能,如表单提交、交互性、动画、小部件和访问活动跟踪。为了进一步提升性能,许多这些脚本托管在高可用基础设施上,如内容分发网络(CDN),使网站能够实现更低的延迟、更快的加载时间和更低的服务器带宽需求。然而,加载第三方脚本存在潜在危险,因为它们在执行期间获得了与网页本地脚本相同的权限[4],从而导致一系列Web攻击,如跨站脚本攻击(XSS)[5, 6]、跨站请求伪造(CSRF)[7]和跨站脚本引入(XSSI)[8]。

通常,不同网站的资源应该彼此隔离以避免潜在的跨站攻击。然而,如果两个网站引入相同的第三方脚本,它们就会彼此产生关联。因此,如果这些第三方脚本遭受上述攻击,它们将面临相同的风险。此外,从安全角度来看,这种做法与浏览器缓存机制结合时会产生无意中的负面影响,该机制将先前获取的Web资源保存在本地存储中以加速网站加载性能。特别是,成功攻陷第三方脚本通常是一次性事件,且只影响有限数量的网站。但如果被攻陷的脚本被缓存,则每当用户访问任何包含相同脚本的网站时,它都可以从本地加载。这样,缓存这样的脚本实际上可以使攻击影响既大规模又持久。

例如,Alice去了一家咖啡店并连接到由攻击者Bob搭建的免费公共WiFi网络。Alice知道公共免费WiFi可能不安全,因此她谨慎地访问网站并避免输入密码等敏感信息。然而,如果Bob能够冒充第三方JavaScript服务器并向Alice发送一个经过修改的恶意第三方JavaScript文件,Bob就能产生事后攻击效果。具体来说,这个恶意脚本会被浏览器缓存。第二天,当Alice连接到安全网络并在任何包含相同脚本的网站上输入密码时,被缓存的恶意脚本将重新激活并窃取Alice的密码。虽然由于HTTPS和HTTP严格传输安全(HSTS)的广泛部署,这类传输中操纵场景已变得不那么可行,但本文分析的风险并不局限于中间人攻击。在实际中,恶意脚本也可能通过被攻陷的第三方提供商、CDN基础设施或软件供应链攻击引入。一旦引入,这些脚本可以被缓存并在多个网站之间重复使用,从而放大其影响。

这个例子表明,第三方JavaScript引入和缓存为间接攻陷网站打开了一扇门。然而,现有研究主要集中在利用JavaScript漏洞成功攻陷用户隐私的攻击策略上[9, 10, 11, 12, 13]。第三方JavaScript引入和缓存所造成的不利影响似乎并未受到同等关注。然而,这种影响不应被忽视,而应被遏制或最小化。根据我们对Alexa排名前100万网站的研究,我们发现多达824,290个网站引入了第三方脚本,而一个第三方脚本最多可被504,692个网站引入。这表明上述攻击可能对互联网浏览而言很常见。此外,我们的研究揭示,51.04%的第三方脚本被设置为缓存超过100天,表明这种攻击可能对受害者用户产生持久影响。

因此,本文的目标不是提出针对第三方脚本的特定攻击,而是调查与第三方JavaScript引入和缓存如何使攻击大规模化和持久化相关的安全问题,并进一步揭示那些疏忽或无意中加剧攻击影响的不安全实践。本文提供了首个全面的互联网范围研究,从两个方面评估第三方JavaScript引入和缓存的当前实践:

— 攻击规模:由于引入了广泛使用的第三方脚本,网站之间的关联性日益增强。引入的传递性(即一个脚本可能引入另一个脚本,后者又引入更多脚本)可能使网站之间的关联更加复杂。追踪每个网站的每个第三方脚本,以定量化理解当前引入实践如何无意中增加来自缓存脚本的攻击的潜在规模,至关重要。

— 风险持续时间:缓存是一种主要为效率而非安全设计的机制。由于缓存可能使恶意脚本在本地浏览器中存活相当长一段时间,从安全角度重新审视当前互联网上第三方JavaScript缓存时长设置的做法是必要的。

在本研究中,我们面临以下挑战并提出相应的解决技术:

(1)一个网站可能间接引入第三方脚本(例如,一个网站引入第三方脚本J1,J1又引入另一个脚本J2)。间接引入的脚本使引入关系变得更加复杂。我们必须能够识别所有间接引入的脚本并追踪不同脚本之间的引入关系。为解决此问题,我们在Chromium[14]之上开发了一套定制的自动化工具包,可以拦截客户端与服务器之间的请求和响应,并准确追踪发起每个请求的脚本。此外,我们定义了三种不同的树结构来捕获网站与脚本之间的引入关系。

(2)当第三方脚本在缓存中过期时,浏览器需要检查服务器上的脚本是否已更新。如果已更新,浏览器从服务器获取新版本;否则,它继续使用旧脚本。因此,仅仅评估脚本的过期时间是不够的,还需要测量其生命周期,定义为脚本在服务器上未被修改的时间段。然而,很难准确预测脚本将来何时会被更新。我们提出了一种时间边界技术,可以准确界定生命周期以解决此问题。

(3)我们必须能够识别所有爬取脚本中的每个第三方脚本。直觉上,由于第三方脚本通常从与网站不同的域名引入,我们可以通过比较脚本和网站的域名来识别它们。然而,这种方法可能并不总是返回正确的识别结果,因为一个网站可能将其本地脚本托管在独立的服务器上,而该服务器的域名与网站不同。为此,我们构建了一个主机列表来首先识别第三方服务提供商的域名。然后,如果第三方脚本的域名匹配列表中的任何条目,我们就可以识别出每个第三方脚本。

我们通过收集所有相关脚本和HTTP头中的缓存配置,研究了Alexa排名前100万网站的第三方JavaScript引入和缓存。1我们发现互联网在很大程度上忽视了缓存第三方脚本的风险,并识别出疏忽和不安全的实践。我们的主要发现可总结如下:

— 复杂且不安全的引入关系:我们发现许多网站开发者在设计中实际上忽视了间接引入。具体来说,我们发现89,723个网站将直接引入的第三方脚本迁移到本地服务器上,使浏览器可以从它们的服务器加载这些脚本以减少安全威胁,但其中多达13,746个(15.32%)网站忽略了将至少一个间接引入的第三方脚本存储在本地服务器上。结果表明,网站与脚本之间复杂的引入关系增加了第三方脚本的管理难度,部分网站确实忽略了将所有间接引入的第三方脚本迁移到本地。

— Expires和max-age配置不一致:HTTP 1.0和HTTP 1.1分别提出了Expires和max-age指标来设置在浏览器中资源的过期时间。然而,我们发现32.54%的第三方脚本具有不一致的Expires和max-age设置,导致从两个指标计算出的过期时间各不相同。结果表明,Web开发者可能不太了解缓存的安全风险,在设置这些指标时不够谨慎。

— 缺乏安全意识设置:HTTP 1.1定义了多个与安全相关的指标来完善Cache-Control中JavaScript缓存的行为(例如,no-cache要求缓存的文件在浏览器验证其未在服务器上更新之前不能重用)。然而,我们的研究显示,81.33%的第三方脚本没有配置任何安全设置来提高缓存安全性。

— 生命周期极长:维护良好的第三方脚本应及时更新。然而,我们发现43,665个第三方脚本的生命周期超过720天,表明这些脚本至少已有两年未更新。因为除非脚本在服务器上被更新,否则浏览器会重用过时的缓存脚本,极长的生命周期设置可以加剧来自缓存第三方脚本的攻击的不利影响。

— 高风险的过期时间配置:HTTP 1.1建议过期时间应设置为资源生命周期的相对较小比例(一个常被引用的指导原则约为10%[15])。然而,我们的研究发现,至少10.65%的第三方JavaScript文件的过期时间超过其生命周期一个数量级。这样的配置可能增加过时或被攻陷脚本在浏览器缓存中的持续性,从而放大第三方JavaScript引入和缓存的潜在影响。

对先前工作的扩展。本文扩展了我们在IEEE CNS 2022上发表的先前工作,显著扩展了范围和分析。首先,我们通过更全面地刻画第三方JavaScript引入结构来增强测量研究,引入了新指标来捕获跨网站依赖关系。特别是,我们开发了新的分析表示,包括JavaScript回溯树和网站关联树,以系统量化大规模脚本在网页间的传播。其次,我们通过引入改进的时间指标来精化缓存行为的时间分析,这些指标能更好地捕获脚本持久性和更新动态。第三,我们提供了更详细的部署实践分析,包括缓存配置和大规模脚本复用模式,并审视了相关的安全影响。最后,我们改进了方法论、扩展了测量分析并纳入了关于局限性和实际考量 的专门讨论,从而增强了整体研究。这些扩展提供了对第三方JavaScript引入和缓存所带来大规模风险的更全面理解。

本文其余部分组织如下。第2节介绍必要的预备知识。第3节描述第三方JavaScript引入和缓存的不利影响,并概述我们的研究目标。

第4节和第5节分别介绍了研究方法和实验设置。第6节展示并分析了测量结果。我们在第7节讨论了研究的局限性并提供了进一步的见解。第8节探讨了潜在的解决方案和缓解策略。最后,我们在第9节回顾了相关工作,并在第10节对全文进行了总结。

2 初步知识

本节简要介绍了第三方JavaScript和浏览器缓存的相关知识。

2.1 第三方JavaScript与安全性

客户端JavaScript在现代Web应用中被广泛使用,因为它允许源代码直接在客户端浏览器中执行,从而减少服务器端的工作负载,并实现快速、响应的用户交互。为了加速开发并提高性能,网站引入第三方JavaScript库已成为一种常见做法。这些库由Google、Facebook以及各类分析或广告平台等外部供应商提供,提供表单验证、用户跟踪和交互式可视化等预构建功能。开发者可以快速集成这些库
相关新闻
生物通微信公众号
微信
新浪微博
  • 搜索
  • 国际
  • 国内
  • 人物
  • 产业
  • 热点
  • 科普

热点排行

    今日动态 | 人才市场 | 新技术专栏 | 中国科学人 | 云展台 | BioHot | 云讲堂直播 | 会展中心 | 特价专栏 | 技术快讯 | 免费试用

    版权所有 生物通

    Copyright© eBiotrade.com, All Rights Reserved

    联系信箱:

    粤ICP备09063491号