我正在构建一个使用(动态插入)JavaScript修改网页的工具。任何网页。导航后立即执行代码:浏览器插件?
这个想法是允许用户使用它来记录对现有网页(如google.com
)的一系列更改(例如,假设更改是将10像素纯黑色边框应用于所有<img>
标签,这种变化显然可以编码为jQuery的简短小贴士),如果您愿意(在这种情况下为google.com
),该工具会生成一个包含此元数据和表示“起点”的url的链接(或标识符)。
现在我遇到的问题是整个同源安全策略,其目的是明确否认它看起来像我需要做的确切类型的事情。
我需要做的是本质上导航到一个特定的网站,然后在该网站的上下文中执行JavaScript。我(工具的作者)以及我与我分享我的脚本的用户都不必控制站点,因此理论上,安全模型如果得到正确实施,应该可以防止这个概念发挥作用。
正因为如此,我不能有一个单一的可点击的链接,启动一些网站上运行我的代码的过程。这完全有意义。如果攻击者网站发送一个变相的可点击链接,它将运行代码,在任何他们想要的网站上扮演我的角色,这将变得微不足道。
但是,解决此问题的方法是告诉收件人执行单个附加步骤。首先,他们像通常一样打开网站的URL,然后他们将一点点javascript:(function(){.....})();
粘贴到URL/omni栏中。这是(AFAICT)完全合法的,应该是允许的,因为用户知道这个脚本正在执行。现在是否应该允许它轻松运行JS或多或少不相关,因为它现在基本上都可以工作。
这并不算太坏,但我认为用户体验不必要地受到影响。例如,它看起来像一个本地应用程序将有必要获得比将iOS粘贴到iOS设备上的URL栏更好的效果,但是在插件接受的完整浏览器上,它看起来像一个插件可以实现我想要的效果。
这是一个导航到一个任意的URL,然后执行代码(这个代码来自一个授权的源代码)只需点击一下。
但我不确定从哪里开始。什么API可以为我提供这种能力?我希望能够脱离Greasemonkey类型的脚本(因为Greasemonkey兼容插件几乎适用于所有优秀的浏览器),但我不知道是否有足够的可用功率。
对于与安全相关的问题,我仍然有点不确定。我以前在这里有一个很大的段落,但这一切都归结为“社会工程”。
哦,我喜欢那样!在服务器端更新脚本。那里有好的见解。 – 2013-02-22 16:30:15