注入 JS 的安全 —— 一段代码真正能做什么
注入的 JavaScript 很强大 —— 它以你访问的页面的完整权限运行。这让它有用,同时也值得了解。本文解释一段代码真正能做什么、以及该信任谁。
注入的 JS 能做什么
一条规则的代码在页面上下文里运行 —— 它有和页面自己的脚本同样的访问权:
- 读取并修改整个 DOM —— 包括表单字段和它们的值。
- 读取对 JS 可用的 cookie 和页面的
localStorage。 - 代表页面发送
fetch请求(在它 CSP 的限制内)。
这正是让规则有用的那些能力。但它意味着执行别人的代码片段就是以那些权限执行别人的代码。
注入的 JS 不能做什么
- 它不读取其他域名的页面 —— 页面的同源策略对它适用。
- 它够不到你磁盘上的文件,也够不到其他标签页。
- 它不读取标记为
HttpOnly的 cookie —— 那些对 JavaScript 是不可见的。
信任原则 —— 粘贴前先读
在导入一个分享的捆绑包时,JustZix 如果它含有 JavaScript 就会显示一个警告 —— 这有道理。一条 CSS 规则顶多弄坏外观。一条 JS 规则能读取你在一个表单里打的东西。在执行别人的代码片段之前:
- 读它。一段简短、可读的代码片段会自我说明。
- 对混淆的代码保持警惕 —— 随机的变量名、长长的 base64 字符串、
eval。一段诚实的代码片段没有理由隐藏。 - 对一个把数据发到陌生地址的
fetch保持警惕 —— 那是潜在的数据外泄。
JustZix 自己不窥探
扩展没有遥测 —— 它不报告你访问哪些页面,也不报告你注入什么。后端只看到同步密钥的哈希和加密的规则捆绑包。风险不在工具里 —— 它在你自己选择执行的代码里。所以自己写规则,或者只执行你理解的那些。
另见
- 同步如何工作 —— 后端看到什么、看不到什么
- 注入与 CSP —— 注入代码的限制
- 为 QA 团队用 JustZix —— 有判断力地分享
安装 JustZix —— 只执行你信任的代码。
为这篇文章评分
暂无评分 — 成为第一个。