白帽子将Web的安全
0 总结
算是比较仔细的读前6章
后面挺多服务端的章节都跳过去,因为我是个Jser
一般找洞刚开始是个比较枯燥的活,后面的很多洞现在应该也不太好使,但是关键是思路
我更倾向于着手当前比较流行的洞,有实践练习,可能会好点
总体评价3.5星(满5)
总页数432
1. 基础
安全三要素
- 机密性
- 完整性
- 可用性
3. 跨站脚本攻击(xss)
3.1 XSS简介
XSS根据效果不同分类
反射型XSS
需要引诱用户点击一个恶意链接,链接上的参数对页面逻辑处理有影响
存储型XSS
把恶意的javascript存储在数据库
加以开启HTTPOnly
成功获取XSS漏洞后
可以帮
用户发出GET/POST请求
可以通过JS画出登录框....从而获取用户的账号密码......
可以通过 visited属性判断用户是否浏览过某些网站
location.hash不会被服务器记载,能很好的达到隐藏的功能
3.3 XSS的防御
3.3.1 四两拨千斤: HTTPOnly
可以针对某一key开启HttpOnloy
3.3.2 输入检查
过滤黑名单
前后端共同校验
3.3.3 输出检查
相应的html转义方法
& -> &
< -> <
> -> >
" -> "
' ->  //不建议&aops;
/ -> / //以防闭合HTML entity
- PHP有htmlentities和htmlspecialchars
- javascript有JavascriptEncode
3.3.5 处理富文本
遵循白名单而非黑名单
例如富文本肯定不包含 iframe script base form等
我们应该尽量使用白名单a img div span
等比较安全的标签
php腿脚使用的XSS Filterhttps://github.com/ezyang/htmlpurifier
4 跨站点请求伪造(CSRF)
4.3 CSRF的防御
4.3.1 验证码
最有效的防御CSRF
4.3.2 Referer Check
验证referer
但是例如HTTPS跳到HTTP,出于安全原因,浏览器不会发Referer
这个方法可以辅助防止CSRF,就是有的时候验证,没有的话,让其走其他通道
4.3.3 Anti CSRF Token
4.3.3.1 CSRF的本质
CSRF攻击的成功: 重要参数都被攻击者猜测到
一般的token都是放在隐藏的input或者session当中
4.3.3.2 Token使用原则
- 切勿放在url上,或者发出的所有请求(img),很大几率把url放在refer泄露
- 有XSS的情况下,CSRF形同虚设
5. 点击劫持
点击劫持的前提
- 流氓运营商
- 钓鱼网址
5.1 什么是点击劫持
使用一个不可见的全屏的元素覆盖在网页上(就是一般黄色网址都有的,点击先跳过去一个游戏网页之类的)
还可以通过点击劫持打开摄像头哦...不过浏览器一般都会访问权限
5.6 防御ClickJacking
5.6.2 X-FRAMT-Options
这个我觉得防止运营商插入的iframe广告还有点用..因为运营商一般放iframe广告比较多,,敢点击劫持的还是少数
当值为
- DENY: 阻止任何FRAME
- SAMEORIGIN: 同域
- ALLOW-FROM: 定义允许frame加载的网页标签
6 HTML5安全
6.1 HTML5新标签
6.1.2 iframe的sandbox
HTML5为iframe添加了sanbox属性,其value可选(多选)有
- allow-same-origin: 允许同源访问
- allow-top-navigation: 允许访问顶层窗口
- aloow-forms: 允许提交表单
- allow-scripts: 允许执行脚本,但有些还是不允许的,例如弹出窗口
6.1.3 Link Types: noreferrer
给a/area标签可以添加rel='noreferer'
这样跳转页面时,不会带referer
6.1.4 Canvas妙用
可以用这个能破解简单的验证码