在现代浏览器中,JavaScript bookmarklet有任何安全限制吗?

时间:2015-11-13 12:50:03

标签: javascript security browser bookmarklet javascript-injection

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

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

2 个答案:

答案 0 :(得分:1)

Bookmarklets是用户运行的脚本。是的,他们可以完成您提到的所有事情(限制与您注入的页面中的任何其他代码的限制相同),但仅限于用户触发它们时。它们确实是脚本注入,但是机器负责人的脚本注入。通过打开浏览器的开发人员工具,用户可以做到至少同样多,甚至更多。

但回答你实际问过的问题:不,我认为在过去的几年中我们没有对bookmarklet进行任何新的限制。

答案 1 :(得分:0)

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

  

实施CSP策略不应干扰用户提供的脚本(如第三方用户代理加载项和JavaScript书签)的操作。

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

  

小书签。人们喜欢他们,CSP打破了他们。

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

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

  

每当用户代理执行javascript URI中包含的脚本时,用户代理就不能执行脚本。 (即使执行此限制,用户代理也应执行“bookmarklets”中包含的脚本。)

     

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

script-src可以通过开发人员工具或用户脚本运行bookmarklet代码来规避,但除此之外

  

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

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

<强>参考