我读了一篇关于bookmarklet的article,这些书签表明bookmarklet非常强大,可能很危险。例如,恶意书签可以收集您的“cookies”,“localStorage”,密码输入框中的字符串,然后将其发送到远程服务器,类似于“脚本注入”。
我很好奇。由于这篇文章是在2007年(8年前)写的,所以bookmarklet(以及浏览器插件)是否有限制以提高现代浏览器的安全性?
答案 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转换为脚本标记的用户脚本将是另一种解决方法
<强>参考强>