在现代浏览器中,JavaScript bookmarklet是否存在任何安全限制

In modern browsers, is there any security limitation for JavaScript bookmarklets?

本文关键字:存在 是否 任何 安全 bookmarklet JavaScript 浏览器      更新时间:2023-09-26

我读过一篇关于bookmarklet的文章,文章说bookmarklet功能强大,可能很危险。例如,恶意bookmarklet可以收集您的"cookie"、"localStorage"、密码输入框中的字符串,然后将其发送到远程服务器,这类似于"脚本注入"。

我对此很好奇。自从这篇文章写在2007年(8年前)以来,bookmarklet(以及浏览器插件)在提高现代浏览器的安全性方面有什么限制吗?

Bookmarklets是用户运行的脚本。是的,它们可以做你提到的所有事情(限制的方式与你注入它们的页面中的任何其他代码都受到限制的方式相同),但只有当用户触发它们时。它们确实是脚本注入,但由机器负责人进行脚本注入。通过打开浏览器开发人员的工具,用户至少可以做同样多的事情,实际上可以做更多的事情。

但在回答你实际提出的问题时:不,我认为在过去几年里,书签没有受到任何新的限制。

内容安全策略不会影响bookmarklets:

强制执行CSP策略不应干扰用户提供的脚本(如第三方用户代理加载项和JavaScript bookmarklet)的操作。

但有一些意想不到的后果:

书签。人们爱他们,而CSP破坏了他们。

例如,Instapaper注入了一个脚本标签,从Instapaper的来源加载instaparting代码。我怀疑它最终也会注入CSS。尽管bookmarklet本身按预期执行,但它在页面上的操作受页面策略的约束,因此这些加载可能会被阻止。mikewest.org和github.com上的情况确实如此。

CSP阻止加载外部脚本的javascript:协议URI:

每当用户代理执行javascript URI中包含的脚本时,用户代理都不能执行该脚本。(即使在强制执行此限制时,用户代理也应该执行"bookmarklets"中包含的脚本。)

修复这个问题会使我的大多数书签都能工作,但对与Pocket和SubToMe等服务相关的书签没有帮助。这些bookmarklet加载外部脚本,这些脚本将被GitHub的script-src-CSP指令阻止。

script-src可以通过开发人员工具或用户脚本运行bookmarklet代码来规避,但这不是的重点

尽管您可以使用什么URL将脚本插入到某些受CSP保护的文档中受到限制,但您可以直接将任何文本插入到文档中。

将bookmarklet转换为脚本标记的用户脚本将是另一种变通方法

参考

  • 内容安全策略级别2

  • 书签的复活

  • Chromium问题233903:CSP:书签应该绕过页面的策略

  • Mozilla Bug#866522-受CSP 影响的书签

  • Webkit Bug 149000–一些扩展触发CSP违规报告

  • 333318-取消对BeforeLoad事件的支持-铬-单轨