subresource-integrity/sri-cdn-watch

GitHub: subresource-integrity/sri-cdn-watch

一个针对已固定 CDN 资源的定时漂移监控工具,在第三方脚本或样式表的字节数据或响应头发生变化时,提供带有取证差异对比的告警。

Stars: 0 | Forks: 0

# sri-cdn-watch 一个用于固定第三方资源的定时漂移监控工具:它会重新请求你依赖的每一个 CDN URL,并在其背后的字节数据发生变化时,提供带有取证差异对比的警报。 Subresource Integrity 在加载时保护你的用户——浏览器会拒绝执行 hash 不再匹配 `integrity` 属性的脚本。但它不会告诉*你*。当 CDN 开始为你固定的 URL 提供不同的字节数据时,首发现象就是部分访客遇到空白页面或静默丢失功能,且其原因与部署错误难以区分。更糟糕的情况是资源从未被固定:被替换的脚本会直接运行。这种形式的攻击在前端供应链中是一个反复出现的模式——包注册表上的账户被接管、CDN 托管的库被重新发布,或者曾经提供小部件的域名易手,成千上万的网站在自身未进行任何部署的情况下执行了新代码。`sri-cdn-watch` 填补了这一空白:它记录每个 URL 应该提供的内容,按计划重新检查,并为值班人员提供 hash 差异、更改的响应头以及 JavaScript 的截断差异——足以让你在一分钟内决定这是“供应商补丁发布”还是“安全事件”。 ## 安装说明 未发布到 PyPI。克隆并运行它: ``` $ git clone https://github.com/subresource-integrity/sri-cdn-watch.git $ cd sri-cdn-watch $ python -m pip install -r requirements.txt $ ./bin/sri-cdn-watch --version sri-cdn-watch 1.0.0 ``` 需要 Python 3.11 或更高版本。唯一的运行时依赖是 [httpx](https://www.python-httpx.org/),它提供了带有可检查重定向历史记录和可插拔 transport 的异步获取功能——后者使得整个测试套件可以在没有网络的情况下运行。`python -m sri_cdn_watch` 的作用与 `./bin/sri-cdn-watch` 完全相同。 ## 用法 以下所有内容都可以针对 `examples/` 中的演示 CDN 复现,该 CDN 提供两个资源,并公开了一个 `/tamper` endpoint,用于将单行数据窃取代码附加到其中一个资源中: ``` $ python examples/demo_server.py & demo CDN on http://127.0.0.1:8731/ (ctrl-c to stop) ``` ### 一条命令接入 将 `import` 指向一个构建好的 HTML 文件或一个实时页面。它会像 linter 一样扫描标记——容忍未闭合的标签、混合的引号和模板化输出——并记录每一个 `