在现代浏览器中,JavaScript bookmarklet是否存在任何安全限制
In modern browsers, is there any security limitation for JavaScript bookmarklets?
我读过一篇关于bookmarklet的文章,文章说bookmarklet功能强大,可能很危险。例如,恶意bookmarklet可以收集您的"cookie"、"localStorage"、密码输入框中的字符串,然后将其发送到远程服务器,这类似于"脚本注入"。
我对此很好奇。自从这篇文章写在2007年(8年前)以来,bookmarklet(以及浏览器插件)在提高现代浏览器的安全性方面有什么限制吗?
Bookmarklets是用户运行的脚本。是的,它们可以做你提到的所有事情(限制的方式与你注入它们的页面中的任何其他代码都受到限制的方式相同),但只有当用户触发它们时。它们确实是脚本注入,但由机器负责人进行脚本注入。通过打开浏览器开发人员的工具,用户至少可以做同样多的事情,实际上可以做更多的事情。
但在回答你实际提出的问题时:不,我认为在过去几年里,书签没有受到任何新的限制。
内容安全策略不会影响bookmarklets:
强制执行CSP策略不应干扰用户提供的脚本(如第三方用户代理加载项和JavaScript bookmarklet)的操作。
但有一些意想不到的后果:
书签。人们爱他们,而CSP破坏了他们。
例如,Instapaper注入了一个脚本标签,从Instapaper的来源加载instaparting代码。我怀疑它最终也会注入CSS。尽管bookmarklet本身按预期执行,但它在页面上的操作受页面策略的约束,因此这些加载可能会被阻止。mikewest.org和github.com上的情况确实如此。
CSP阻止加载外部脚本的javascript:
协议URI:
每当用户代理执行javascript URI中包含的脚本时,用户代理都不能执行该脚本。(即使在强制执行此限制时,用户代理也应该执行"bookmarklets"中包含的脚本。)
修复这个问题会使我的大多数书签都能工作,但对与Pocket和SubToMe等服务相关的书签没有帮助。这些bookmarklet加载外部脚本,这些脚本将被GitHub的script-src-CSP指令阻止。
script-src
可以通过开发人员工具或用户脚本运行bookmarklet代码来规避,但这不是的重点
尽管您可以使用什么URL将脚本插入到某些受CSP保护的文档中受到限制,但您可以直接将任何文本插入到文档中。
将bookmarklet转换为脚本标记的用户脚本将是另一种变通方法
参考
-
内容安全策略级别2
-
书签的复活
-
Chromium问题233903:CSP:书签应该绕过页面的策略
-
Mozilla Bug#866522-受CSP 影响的书签
-
Webkit Bug 149000–一些扩展触发CSP违规报告
-
333318-取消对BeforeLoad事件的支持-铬-单轨
- 用于检查数组中是否存在元素的javascript自定义方法
- 是否存在React Native“;WEB代码安全防护”;
- 验证会话中是否存在对象's数组
- 如何查找值是否存在于二叉树中
- 检查是否存在使用chrome扩展的javascript库
- 是否存在Javascript Liferay Service库的文档?如何处理错误情况
- 测试mongo脚本中是否存在参数
- 检查搜索结果是否存在多次如果是,则在Javascript中只显示一个结果
- 使用js/jQuery检查对象(而不是元素)是否真的存在
- 检查数组中是否存在字符串值,并返回找到的数组值js
- 如何通过json对象选项卡中的Id来检查对象是否存在
- 检查是否存在任意控制器/操作
- 如何检查一个字符串的所有字符是否都存在于另一个字符串中
- Javascript滑块不滑动,如何判断是否存在JS冲突
- 根据手机上是否存在文件,在jQuery mobile中动态填充列表视图
- javascript测试是否存在两个标志中的任何一个
- 如何使用javascript检查移动sd卡中是否存在文件
- 当提供函数名称时,检查函数是否存在于同一作用域中
- 需要帮助使用JQuery.inArray()检查值是否存在
- 在运行Javascript/jQuery中的函数之前,检查元素是否存在是否更具性能