51
WEB 安安 2.0 Email [email protected] coolui

第四节课:web安全2.0

Embed Size (px)

Citation preview

Page 1: 第四节课:web安全2.0

WEB 安全 2.0

Email : [email protected]

coolui

Page 2: 第四节课:web安全2.0

WEB 安全的危害性

• 谈谈你平时遇到和看到的web 安全问题?

• 平时开发过程中有没有考虑过安全问题?

Page 3: 第四节课:web安全2.0

WEB 安全

• 有哪些常见的 web 安全类型:

信息欺骗 隐私信息泄露 XSS

CSRF

Cross Iframe Trick

ClickJacking

SQL 注入 文件上传

Page 4: 第四节课:web安全2.0
Page 5: 第四节课:web安全2.0

信息欺骗

用户界面( UI )欺骗

Page 6: 第四节课:web安全2.0

信息欺骗

HTTP Referer 字段的欺骗

• 开发人员使用 Referer 字段值阻止其他网站引用他们网站的图片文件,或者阻止第三方服务器向他们服务器的脚本程序提交 HTML 表单数据。

• 但是 Referer 却可以被攻击者很容易的伪造。

Page 7: 第四节课:web安全2.0

信息欺骗

同形异义字的欺骗

例如,用户名“ com” ,其中“ c” 和“ o” 为拉丁字母。但是使用俄语的西里尔字母表示“ c” 和“ o” ,它们看起来和拉丁文字符长的一样,但是完全不是同一个字符。所以 passport 后台判断不重名,是允许注册的。

Page 8: 第四节课:web安全2.0

信息欺骗

URL 页面重定向欺骗

http://www.baidu.com/baidu.php?url=RedirectURL

Page 9: 第四节课:web安全2.0
Page 10: 第四节课:web安全2.0

隐私泄露

以前通过下面接口可以获取任何私信消息:

http://msg.baidu.com/?cm=AcViewContent&ct=113000&op=6&tn=bmMessage&mid=275351318&qid=0&srcmid=275350905&re=0&rid=1&un=sv008&nocache=0.28658272071011925

Page 11: 第四节课:web安全2.0

隐私泄露

通过下面空间的接口可以获取到任何人的好友:

http://frd.baidu.com/?ct=28&un=coolui&cm=FriList&tn=bmABCFriList&callback=gotfriends

Page 12: 第四节课:web安全2.0

隐私泄露

错误提示:过多信息暴露

Page 13: 第四节课:web安全2.0

隐私泄露

错误提示:过多信息暴露

Page 14: 第四节课:web安全2.0
Page 15: 第四节课:web安全2.0

XSS

• 什么是 XSS ?

• XSS ( Cross Site Script )跨站脚本攻击,是指攻击者利用站点的安全漏洞往 Web 页面里插入恶意 html 代码或 JS 脚本。

• 因为这种攻击是通过别人的网站脚本漏洞达到攻击的效果,就是说可以隐藏攻击者的身份,因此叫做跨站攻击。

Page 16: 第四节课:web安全2.0

XSS

• XSS 漏洞攻击的分类:

( 1 )非持久性 XSS

( 2 )持久性 XSS

Page 17: 第四节课:web安全2.0

XSS

• XSS 攻击方法 1 :万恶的 document.write + document.location.href

Page 18: 第四节课:web安全2.0

XSS

• XSS 的攻击方法 2 :模板中变量未进行合理字符转义

1 、没有过滤 </script>

2 、没有过滤 */ 或者 /* :不要在注释中留有代码

Page 19: 第四节课:web安全2.0

XSS

• XSS 的攻击方法 3 :通过输入半个汉字来构造

■"alert('cookie');经转义■\"alert('cookie');

<script>var _title = "$title";...

</script>

<script>var _title = " ? "alert('cookie'); ";...

</script>

Page 20: 第四节课:web安全2.0

XSS

• XSS 的攻击方法 4 :富编辑导致的漏洞

• 一般富编辑中需要进行如下处理:

标签的转义: <script> 、 <style> 等等 关键词的过滤: javascript 、 exepression

标签属性的过滤: onload 、 onerror 、 onmousemove 、 onmouseout 、 onmouseover

、 onmouseup 、 onmouseenter 、 onmouseleave 、 onmousewheel 、onscroll

• 实例style="top:expression(alert('XSS'));"

style="background:url(javascript:alert('XSS'));"

Page 21: 第四节课:web安全2.0

XSS

• XSS 的攻击方法 5 : CSS 自定义导致的漏洞攻击

引入脚本的一般方法包括:

div{background:url(javascript:alert(0))};

div{background:url(vbscript:alert(0))};

div{background:expression(alert(0))};

通过 @import 引入一个外部的 css 文件, 该文件中包含有上述引入恶意 js 的代码。

Page 22: 第四节课:web安全2.0

XSS

• XSS 的攻击方法 6 :通过字符集编码来构造

攻击者可以通过上传如下代码的 CSS 文件:

@charset "utf-7";a{80sec:expre/+ACoAKg-/ssion(if(!window.x){alert(/xxx/);window.x=1})}

漏洞原因:

@charset “utf-7”; 表明了 css 代码的编码格式为 utf-7 ,而根据 utf-7 的编码规则,是由 “ +” 开始, “ -” 结束的一堆代码( - 结尾非必要)。

那么 +ACoAKg-  即 utf-7 编码格式,经由浏览器转换成 gbk 之后,就变成了  ** ,即原来的  /+ACoAKg-/ 变成了 /**/ 也就是普通的 css 注释了, xss 自然就发生了。

Page 23: 第四节课:web安全2.0

XSS

• XSS 的攻击方法总结

大家回忆一下 XSS 有哪些攻击方法。

Page 24: 第四节课:web安全2.0
Page 25: 第四节课:web安全2.0

CSRF

• 什么是 CSRF 攻击

CSRF 是伪造客户端请求的一种攻击, CSRF 的英文全称是 Cross Site Request Forgery 。

字面上的意思是跨站点伪造请求。直白一点讲:“借”用你的session 来完成一些对于你来说是恐怖的事——“转帐”等权限提交操作。

Page 26: 第四节课:web安全2.0

CSRF

• CSRF 攻击的分类

CSRF 站内攻击

CSRF 站外攻击

Page 27: 第四节课:web安全2.0

CSRF

• CSRF 的实例 1 :站内自动退出

一般 passport退出是一个 get 请求:https://passport.baidu.com/logout

如果在贴吧内发一个图片的贴子,图片的 src 就指向上面的 url 。那么每个登陆的用户打开这个特殊的贴子之后就会自动掉线。

为什么会这样?

Page 28: 第四节课:web安全2.0

CSRF

• CSRF 的实例 2 :私信的 CSRF 漏洞

发私信是 post 提交,需要登陆情况下,但是没有验证码!在百度身份认证模式下就可以导致站外的 CSRF 攻击:即攻击者在自己的站点创建一个 PHP 文件来构造私信的表单提交。

Page 29: 第四节课:web安全2.0

CSRF

• 为什么会导致 CSRF 漏洞

1、百度 sessionID 是保存在 baidu.com域名下的 cookie 信息。

2 、 P3P协议导致 cookie 可以跨域传递。 ff 是允许 cookie 跨域传递。

Page 30: 第四节课:web安全2.0
Page 31: 第四节课:web安全2.0

Cross Iframe Trick

• Cross Iframe Trick 是什么?

什么是 cross iframe ,简单来说就是把 iframe 做一个迭代,以实现一些iframe 之间的交叉数据访问。在正常的 web应用中,许多地方都有用到这种技术,比如 facebook ,比如 yahoo 。

cross iframe Trick 就是通过 iframe 的实现技术漏洞导致的攻击。

Page 32: 第四节课:web安全2.0

Cross Iframe Trick

实例 1 :利用同域下两个 iframe 可以互通来进行攻击

A : 1.html ( XSS 漏洞)

B : 2.html

A域名下的 1.html 页面存在 XSS 漏洞怎么来攻击 B域名下的 2.html 了?

如果 B域名下也存在一个有 XSS 漏洞的页面 *.html ,这就好办了。

在 1.html 页面构造一个隐藏的 iframe ,指向 *.html 页面,通过 *.html 来调用2.html

Page 33: 第四节课:web安全2.0

Cross Iframe Trick

实例 2 :利用 iframe proxy 来攻击

A : 1.htmlB : 2.html

A 站点的 1.html 页面正常

嵌套的 B 站点 2.html 页面被攻击者控制

A 站点下可以找到一个存在 XSS 的页面

那么攻击成为了现实!•假象 A 站点为百度, B 站点为联盟网站•通过 B 站点很容易执行 A 站点 1.html 页面代码

A : *.html

Page 34: 第四节课:web安全2.0

Cross Iframe Trick

实例 3 : document.domain 通信导致的漏洞

Page 35: 第四节课:web安全2.0
Page 36: 第四节课:web安全2.0

WEB 安全漏洞攻击方法 - ClickJacking

• ClickJacking :点击劫持

• 演示: http://fe.baidu.com/doc/websafe/demo/clickjacking-demo1.html

Page 37: 第四节课:web安全2.0
Page 38: 第四节课:web安全2.0

WEB 安全漏洞攻击方法 – SQL 注入

SQL 注入实例

经典的万能密码 : OR ‘’ = ‘’

admin1=request("admin") password1=request("password")

set rs=server.CreateObject("ADODB.RecordSet")

rs.open "select * from admin where admin='" & admin1 & "' and password='"& password1 &"'",conn,1

在用户名和密码那里都填入: ‘ OR ’’=’ 。 SQL 语句被构造成: select * from admin where admin=’’ OR ’’=’’ and password=’’ OR ’’=’’

Page 39: 第四节课:web安全2.0
Page 40: 第四节课:web安全2.0

WEB 安全漏洞攻击方法 – 文件上传

远程文件上传和加载

最直接的例子:图片上传功能,如果文件名后缀不进行任何的判断,则攻击者可能上传一个 PHP 文件,然后通过该 PHP 文件来操作服务器的其他有用资源。

Page 41: 第四节课:web安全2.0

WEB 安全漏洞攻击方法 - 总结

•大家一起回顾一下刚才将的几种漏洞攻击方法?

Page 42: 第四节课:web安全2.0

WEB 安全编码规范

• 随着百度 C2C 、 IM 产品线的推出, web安全显得越来越重要。

• 我们怎么正确设计和编码,来避免出现以上的各种安全漏洞了?我们接着往下看。

Page 43: 第四节课:web安全2.0

WEB 安全编码规范

• 正确的字符转义 - 可以杜绝绝大部分 XSS 漏洞

所有的数据都不可信任:获取的数据在页面展示需要进行相应转义。

1 、 HTML 转义;2 、 JavaScript 转义;3、复合转义:先 HTML 转义,再 JavaScript 转义;4、复合转义:先 JavaScript 转义,再 HTML 转义;5 、 URL 转义;

Page 44: 第四节课:web安全2.0

WEB 安全编码规范

• 规范的字符编码 和处理 - 可以杜绝绝大部分 XSS 漏洞

1、新产品线尽量使用 UTF-8 ,避免出现很多编码问题,例如半个汉字的问题 

2、对用户输入的半个汉字进行扫描和过滤处理。

3、对 GBK 编码集区域进行统一规定,不要多个产品线不同的策略,不然容易导致问题。

Page 45: 第四节课:web安全2.0

WEB 安全编码规范

• 提交操作的规范

1、尽量使用 POST 提交。

2、必要时添加 refer检查 – 白名单。

3 、 Form 表单提交都需要添加图形验证码

4、使用与用户身份绑定和时间唯一性的 token

5、尽量不要滥用 P3P协议

Page 46: 第四节课:web安全2.0

WEB 安全编码规范

• 富编辑和开放 CSS 的过滤规范

白名单原则:规范富编辑中只允许的标签规定标签中只允许的属性

抛弃和限制策略,而非过滤:在属性中发现 javascript 、 vbscript 、 expression 等关键词直接抛弃发现 onload 、 onerror 、 onmousemove 等不允许属性直接抛弃

Page 47: 第四节课:web安全2.0

WEB 安全编码规范

Iframe 进行通信的规范使用

1、不能嵌套随意页面 

2、谨慎使用 document.domain 方案来解决主域名和子域名之间通信:可以使用一个与主域名同域的静态文件跳转来解决。

Page 48: 第四节课:web安全2.0

WEB 安全编码规范

SQL 语句拼接的字符检测规范

1、尽量使用函数支持的 sql 语句编写方法

2、如果确实需要拼接来写 sql 语句,则对用户可输入的参数进行严格的统一检查和转义。

SQL 是完全可以杜绝的。只要遵守检查和转义规范。

Page 49: 第四节课:web安全2.0

WEB 安全编码规范

Passport 统一认证的安全升级

思想:将各个产品线的 sessionID 放到各自的产品线子域名下。做到产品线之间的安全隔离

Page 50: 第四节课:web安全2.0

WEB 安全编码规范 – 总结

• 有谁能总结一下刚才讲的安全编码规范有哪些?它们都能解决哪些介绍的漏洞攻击?(大家讨论)

Page 51: 第四节课:web安全2.0

谢谢!

Q&A