1

我正在编写一个 XUL 应用程序,它记录使用<browser>标签创建的浏览器实例内发生的所有网络通信。

我可以使用 http-on-modify-request 来跟踪所有发出的请求并相应地修改标头,但我无法区分哪个请求是由 Flash 等插件发出的,还是由 JavaScript 发出的。

有没有办法区分这些请求?

4

1 回答 1

1

警报,讨厌的黑客入侵!

您绝对无法区分对 Flash 和 Javascript 的请求,因为它们实际上使用相同的 Mozilla 平台 API。

但是,没有什么可以阻止您在实现中检查非 Flash 请求时看起来不同http-on-modify-request——您需要做一些事情来使所有这些非 Flash 请求看起来不同。

我能想到的最简单的方法是添加(然后在处理程序中剥离http-on-modify-request)一个 QueryString 参数。

所以基本上,只需在每个请求 URI 中添加类似?___NONFLASH__=897123487或的内容。&___NONFLASH__=897123487(您897123487在初始化时随机生成令牌,以便 JavaScript/Flash 无法猜测它试图从这个“沙箱”中“逃脱”)。

您需要在浏览器中影响以下内容content.contentDocument

  • 链接 - 改变它们的href属性
  • 表格 - 改变他们的action属性
  • window.XMLHttpRequest- 用您自己制作的版本替换它(确保在任何客户端脚本运行之前替换它!)

这只留下客户端脚本启动的window级别导航(例如:window.location.href更改)。您可以使用 anNSIObserver或 anNSIProgressListener来监视 URL 更改/重新加载。

编辑:所有这一切都假设 Flash 内容没有使用 Flash<-->JavaScript 桥接并在 JavaScript 端执行所有请求(不太可能!--但可能)。

于 2014-01-19T03:35:29.437 回答