在现代浏览器中,JavaScript 小书签是不是有任何安全限制?

Posted

技术标签:

【中文标题】在现代浏览器中,JavaScript 小书签是不是有任何安全限制?【英文标题】:In modern browsers, is there any security limitation for JavaScript bookmarklets?在现代浏览器中,JavaScript 小书签是否有任何安全限制? 【发布时间】:2016-02-15 01:23:42 【问题描述】:

我读过一篇关于书签的article,它说书签非常强大,可能很危险。例如,恶意书签可以收集你的“cookies”、“localStorage”、密码输入框中的字符串,然后发送到远程服务器,类似于“脚本注入”。

我对此很好奇。由于这篇文章写于 2007 年(8 年前),对于小书签(以及浏览器插件)是否有任何限制以提高现代浏览器的安全性?

【问题讨论】:

我所知道的是,如果不在开头手动输入“javascript:”,您将无法自动创建 JS 书签。 【参考方案1】:

书签是用户运行的脚本。是的,他们可以做你提到的所有事情(与你注入它们的页面中的任何其他代码一样受到限制),但仅限于用户触发它们时。确实是脚本注入,但是脚本注入机器负责人。通过打开浏览器的开发者工具,用户至少可以做很多事情。

但回答您实际提出的问题:不,我认为在过去几年中对小书签没有任何新的限制。

【讨论】:

【参考方案2】:

内容安全政策无意影响书签:

强制执行 CSP 政策不应干扰用户提供的脚本的操作,例如第三方用户代理插件和 JavaScript 小书签。

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

书签。人们喜欢它们,而 CSP 打破了它们。

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

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

只要用户代理执行包含在 javascript URI 中的脚本,用户代理就不能执行该脚本。 (即使强制执行此限制,用户代理也应执行“书签”中包含的脚本。)

修复该问题将使我的大多数小书签都能正常工作,但对与 Pocket 和 SubToMe 等服务相关的小书签无济于事。这些书签加载外部脚本,这些脚本将被 GitHub 的 script-src CSP 指令阻止。

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

...虽然您可以使用哪个 URL 将脚本注入到某些受 CSP 保护的文档中,但您可以将任何文本直接插入到文档中。

将小书签转换为脚本标签的用户脚本将是另一种解决方法

参考文献

Content Security Policy Level 2

The Resurrection of Bookmarklets

Chromium Issue 233903: CSP: Bookmarklets should bypass pages' policies

Mozilla Bug #866522- Bookmarklets affected by CSP

Webkit Bug 149000 – Some extensions triggers CSP violation reports

333318 - Remove support for BeforeLoad event - chromium - Monorail

【讨论】:

以上是关于在现代浏览器中,JavaScript 小书签是不是有任何安全限制?的主要内容,如果未能解决你的问题,请参考以下文章

无需 JavaScript 即可加载当前页面的书签?

可以设置域 cookie 破坏跨域安全性的 javascript 小书签吗?

可以提高web前端开发效率的6个浏览器书签,建议你赶快用起来吧!

现代浏览器中的非阻塞 javascript 和 css。还需要吗?

javascript [一键订阅Inoreader书签脚本]可用于在浏览器创建一个“一键订阅至Inoreader”的脚本书签按钮

跨浏览器书签/添加到收藏夹 JavaScript [重复]