0

我正在构建一个使用(动态插入)JavaScript 来修改网页的工具。任何网页。

这个想法是允许用户使用它来记录对现有网页的一系列更改,例如google.com,(例如,假设更改是对所有<img>标签应用 10 像素纯黑色边框,这个更改显然可以编码作为 jQuery 的一个简短而甜蜜的片段),并且该工具会生成一个链接(或标识符),其中包含此元数据和表示“起点”的 url(如果您愿意的话)(在这种情况下google.com)。

现在我遇到的问题是整个同源安全策略,其目的是明确否认我似乎需要做的事情。

我需要做的基本上是导航到特定站点,然后在该站点的上下文中执行 javascript。我(该工具的作者)和与我共享脚本的用户都不一定能控制该站点,因此理论上,如果实施得当,安全模型应该会阻止这个概念起作用。

因此,我不能有一个可点击的链接来启动在某个站点上运行我的代码的过程。这也完全有道理。攻击者站点发送伪装的可点击链接将变得微不足道,该链接将在他们想要的任何站点上运行充当我的代码。

但是,绕过它的方法是告诉接收者做一个额外的步骤。首先,他们像平常一样打开网站的 URL,然后将一些内容粘贴javascript:(function(){.....})();到 URL/omni 栏中。那是(AFAICT)完全合法并且应该是允许的,因为用户知道这个脚本正在被执行。在这一点上是否应该允许它如此轻松地运行 JS 或多或少无关紧要,因为它现在基本上可以在任何地方工作。

这还不错,但我认为用户体验受到了不必要的影响。例如,与将 JS 粘贴到 iOS 设备上的 URL 栏中相比,它看起来需要一个原生应用程序,但在接受插件的完整浏览器上,插件似乎可以实现我想要的。

即:一键导航到任意 URL,然后执行代码(此代码源自授权来源)。

但我不知道从哪里开始。什么 API 可以为我提供这种能力?我希望我可以摆脱 Greasemonkey 类型的脚本(因为 Greasemonkey 兼容的插件可用于几乎所有优秀的浏览器),但我不知道是否有足够的功能可用。

我实际上仍然有点不确定与此相关的安全问题。我曾经在这里有一个很大的段落,但这一切都归结为“社会工程”。

4

2 回答 2

0

这种事情一般都是用小书签来完成的。

在以您的脚本为特色的网站上,创建一个包含href="javascript:(function(){/* ... */})()". 然后用户可以简单地将该链接拖放到他的收藏夹中(添加书签)。并将其用作收藏夹栏中的按钮。

您的小书签可以直接包含您的脚本,或者一个将<script src=http://mywebsite.com/script.js">标签注入文档的简单加载程序,这样您就可以更新您的脚本并将其直接“分发”给所有用户。

于 2013-02-22T08:40:27.760 回答
0

安全始终与知识有关。或者反过来说:不知道某事会让你感到不安全。

没有安全的方法可以做你想做的事,这是我的网络浏览器默认禁止的。有一些解决方法(比如粘贴上面解释的 URL),但只要用户知道她在做什么,所有这些都是安全的。

这就是社会影响。现在的技术解决方案:

  1. 你试试小书签
  2. 您可以使用像Greasemonkey这样的浏览器插件

两者都允许运行任意 JavaScript。前者每次都需要用户的明确许可,后者自动执行。

当然,如果您将功能的核心移动到一个偏远的地方,即使是像我这样知识渊博的用户也很难理解和信任正在发生的事情。

那是当函数的内容不在书签或greasemonkey 脚本中时,而是当您添加<script>带有远程URL 的标签时。这将使确保您的脚本不会做“奇怪”的事情变得更加困难。例如,当我尝试在不使用您的书签的情况下下载 JavaScript 时,您可能会返回不同的脚本。

于 2013-02-22T08:41:38.907 回答