【问题标题】: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 书签。

标签: javascript security browser bookmarklet javascript-injection


【解决方案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 保护的文档中,但您可以将任何文本直接插入到文档中。

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

    参考文献

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-09
      • 2011-11-21
      • 2019-01-18
      • 2011-08-11
      • 2010-09-23
      • 2018-06-12
      相关资源
      最近更新 更多