我正在构建一个使用(动态插入)JavaScript 来修改网页的工具。任何网页。
这个想法是允许用户使用它来记录对现有网页的一系列更改,例如google.com
,(例如,假设更改是对所有<img>
标签应用 10 像素纯黑色边框,这个更改显然可以编码作为 jQuery 的一个简短而甜蜜的片段),并且该工具会生成一个链接(或标识符),其中包含此元数据和表示“起点”的 url(如果您愿意的话)(在这种情况下google.com
)。
现在我遇到的问题是整个同源安全策略,其目的是明确否认我似乎需要做的事情。
我需要做的基本上是导航到特定站点,然后在该站点的上下文中执行 javascript。我(该工具的作者)和与我共享脚本的用户都不一定能控制该站点,因此理论上,如果实施得当,安全模型应该会阻止这个概念起作用。
因此,我不能有一个可点击的链接来启动在某个站点上运行我的代码的过程。这也完全有道理。攻击者站点发送伪装的可点击链接将变得微不足道,该链接将在他们想要的任何站点上运行充当我的代码。
但是,绕过它的方法是告诉接收者做一个额外的步骤。首先,他们像平常一样打开网站的 URL,然后将一些内容粘贴javascript:(function(){.....})();
到 URL/omni 栏中。那是(AFAICT)完全合法并且应该是允许的,因为用户知道这个脚本正在被执行。在这一点上是否应该允许它如此轻松地运行 JS 或多或少无关紧要,因为它现在基本上可以在任何地方工作。
这还不错,但我认为用户体验受到了不必要的影响。例如,与将 JS 粘贴到 iOS 设备上的 URL 栏中相比,它看起来需要一个原生应用程序,但在接受插件的完整浏览器上,插件似乎可以实现我想要的。
即:一键导航到任意 URL,然后执行代码(此代码源自授权来源)。
但我不知道从哪里开始。什么 API 可以为我提供这种能力?我希望我可以摆脱 Greasemonkey 类型的脚本(因为 Greasemonkey 兼容的插件可用于几乎所有优秀的浏览器),但我不知道是否有足够的功能可用。
我实际上仍然有点不确定与此相关的安全问题。我曾经在这里有一个很大的段落,但这一切都归结为“社会工程”。