《Web前端安全黑客技术揭秘》读书笔记
这篇博客详细记录我在阅读本书过程中觉得重要的知识点以及我觉得需要了解的各种前端安全概念。
第一章 Web安全的关键点
- 数据与指令
- 浏览器同源策略
- 信任与信任关系
- 社会工程学的作用
- 攻防不单一
- 场景很重要
浏览器的同源策略:不同域的客户端脚本在没明确授权的情况下,不能读写对方的资源。
第二章 前端基础
1.URL
格式:<scheme>://<netloc>/<path>?<query>#<fragment>
例如,http://www.foo.com/path/f.php?id=1&type=cool#new
对应关系是:
<scheme> - http
<netloc> - www.foo.com
<path> - /path/f.php
<query> - id=1&type=cool
<fragment> - new
URL编码方式,有三类:escape、encodeURI、encodeURIComponent,对应的解码函数是:unescape、decodeURI、decodeURIComponent。这三个编码函数是有差异的,甚至在自动URI编码中也存在差异。
2.HTTP协议
URL的请求协议几乎都是 http ,每次请求响应后都会立即断开或延时断开,断开后,下一次连接再重新建立。
通过 Cookies 进行会话跟踪,第一次响应时设置的 Cookies 在随后的每次请求中都会发送出去。Cookies 还可以包括登录认证后的身份信息。
3.JavaScript
(1)DOM树
我们的隐私数据可能存储在以下位置:
- HTML 内容中
- 浏览器本地存储中,如 Cookies 等
- URL 地址中
(2)iframe
父页与子页之间如何跨文档读写数据?
如果父页和子页之间是同域,父页可以通过调用子页的 contentWindow 来操作子页的 DOM 树,同理,子页可以调用父页的 contentWindow 来操作父页的 DOM 树。如果不同域,则必须严格遵守同源策略,但子页还是可以对父页的 location 值进行写操作,这样可以让父页重定向到其他网页,不过对 location 的操作仅仅只有写权限。
(3)CORS
W3C 的新标准中, CORS(Cross-Origin-Resource Sharing)开始推进浏览器支持这样的跨域方案。发起请求会自动带上 Origin 头,目标域会判断 Origin 值,如果是自己预期的就会返回 Access-Controll-Allow-Origin 头表示同意跨域。IE 下不使用 XMLHttpRequet 对象,而是使用自己的 XDomainRequest 对象。
(4)Cookie 安全
Cookie的重要字段如下:
[name][value][domain][path][expires][httpOnly][secure]
- 子域 Cookie 机制
- 设置 Cookie 可以指定 domain 为父级域,好处是可以在不同子域共享 Cookie ,坏处就是攻击者控制的其他子域也能读到这个 Cookie。
- 路径 Cookie 机制
- 通过跨 iframe 进行 DOM 操作来跨路径读取 Cookie
- HttpOnly Cookie 机制
- 仅在 HTTP 层面上传输的 Cookie,当设置了 HttpOnly 标识后,客户端脚本就无法读写该 Cookie。
- Secure Cookie 机制
- 设置了 Secure 标识的 Cookie 仅在 HTTPS 上安全传输,如果请求是 HTTP 的,就不会带上这个 Cookie。
- 本地 Cookie 与内存 Cookie
- 如果没有设置过期时间,这样的 Cookie 会随着浏览器的关闭从内存消失,如果设置为未来的某个时间点,那么这样的 Cookie 就会以文本形式保存在操作系统本地。
- Cookie 的 P3P 性质
- 该字段用于标识是否允许目标网站的 Cookie 被另一个域通过加载目标网站而设置或发送,仅 IE 执行了该策略。
(5)本地存储风险
本地存储的方式有很多:
- Cookie
- UserData
- localStorage
- local Database
- Flash Cookie
本地存储的主要风险是被植入广告跟踪标识。
(6)JavaScript 函数劫持
只要在函数出发触发前,重写这个函数即可。
4.CSS
(1)CSS 容错性
(2)样式伪装
(3)CSS 伪装
:visited 伪类技巧(已修补)
::selection(Chrome 下有效)
(4)CSS3 的属性选择符
5.ActionScript
(1)Flash 安全沙箱
- 权限控制
- 管理用户控制
- 用户控制
- Web 站点控制
- 作者开发人员控制
- 安全沙箱
- 远程沙箱
- 本地沙箱
(2)HTML 嵌入 Flash 的安全相关配置
(3)跨站 Flash
(4)参数传递
(5)Flash 里的内嵌 HTML
(6)与JavaScript 通信
(7)网络通信
(8)其他安全问题