在现代浏览器中,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 小书签是不是有任何安全限制?的主要内容,如果未能解决你的问题,请参考以下文章
可以设置域 cookie 破坏跨域安全性的 javascript 小书签吗?
可以提高web前端开发效率的6个浏览器书签,建议你赶快用起来吧!
现代浏览器中的非阻塞 javascript 和 css。还需要吗?
javascript [一键订阅Inoreader书签脚本]可用于在浏览器创建一个“一键订阅至Inoreader”的脚本书签按钮