fransr/postMessage-tracker
GitHub: fransr/postMessage-tracker
一款 Chrome 浏览器扩展,用于监控和记录网页中 postMessage 监听器的注册、通信及堆栈信息,辅助安全审计和前端调试。
Stars: 1327 | Forks: 191
# postMessage-tracker
由 [Frans Rosén](https://twitter.com/fransrosen) 开发。在 2018 年的 OWASP AppSec Europe 大会上通过 ["Attacking modern web technology"-talk](https://www.youtube.com/watch?v=oJCCOnF25JU)([幻灯片](https://speakerdeck.com/fransrosen/owasp-appseceu-2018-attacking-modern-web-technologies))首次展示,最终于 2020 年 5 月发布。
这款 Chrome 扩展程序通过显示当前窗口中监听器的数量指示器,来监控 postMessage 监听器。
它支持跟踪窗口中所有子框架的监听器。它还能跟踪短暂的监听器以及在交互时启用的监听器。你还可以使用扩展中的 Log URL 选项,记录监听器函数及其位置,以便日后查看。这使得你能够找到那些只在 iframe 内短暂启用的隐藏监听器。
它还会在控制台中向你展示窗口之间的交互,并使用路径标明具体的窗口,你可以利用该路径自行重放消息:
它还支持跟踪不同窗口之间发生的通信,只需在控制台中使用 `diffwin` 作为发送者或接收者即可。
# 功能
* 支持 Raven、New Relic、Rollbar、Bugsnag 和 jQuery 包装器,并能“解包”它们以向你展示真实的监听器。
* 尝试绕过并重新路由包装器,以便 Devtools 控制台能显示正确的监听器:
**使用 New Relic 时:**
**使用 postMessage-tracker 后:**
**使用 jQuery 时:**
**使用 postMessage-tracker 后:**
* 允许你在扩展选项中设置 Log URL,以便通过提交监听器及其函数,将每个监听器的所有信息记录到某个 endpoint(从而能够在日后查看所有监听器)。在 `chrome://extensions` 页面点击该扩展时,你可以在“扩展选项”中找到这些设置:
* 支持匿名函数。Chrome 不支持对匿名函数进行 stringify 操作,因此在遇到匿名函数的情况下,你会看到 `bound` 字符串作为监听器:
# 已知问题
~由于某些网站可能会以带有 XHTML namespace 的 XML 格式提供,它也会附加到普通的 XML 文件中,并渲染在 XML 的顶部。如果你在浏览器中查看 XML 文件,这可能会让你感到困惑,因为完整注入的脚本存在于 XML 的 DOM 中。我还没有找到一种方法可以将其从真实的 XML 文件中隐藏,同时又保持对 XHTML namespace 的支持。~ 如果 `document.contentType` 为 `application/xml`(即 Chrome 渲染 XML 文件时的情况),则不会将内容脚本添加到 DOM 中。
**使用 postMessage-tracker 后:**
**使用 jQuery 时:**
* 支持匿名函数。Chrome 不支持对匿名函数进行 stringify 操作,因此在遇到匿名函数的情况下,你会看到 `bound` 字符串作为监听器:
# 已知问题
~由于某些网站可能会以带有 XHTML namespace 的 XML 格式提供,它也会附加到普通的 XML 文件中,并渲染在 XML 的顶部。如果你在浏览器中查看 XML 文件,这可能会让你感到困惑,因为完整注入的脚本存在于 XML 的 DOM 中。我还没有找到一种方法可以将其从真实的 XML 文件中隐藏,同时又保持对 XHTML namespace 的支持。~ 如果 `document.contentType` 为 `application/xml`(即 Chrome 渲染 XML 文件时的情况),则不会将内容脚本添加到 DOM 中。标签:CMS安全, JavaScript, Web安全, 安全测试, 攻击性安全, 数据可视化, 流量监控, 浏览器扩展, 自定义脚本, 蓝队分析