web前端 安全须知 拔赤

31
前端安全须知 拔赤 [email protected] 2010-02-26

Upload: jay-li

Post on 07-Jul-2015

2.514 views

Category:

Technology


7 download

TRANSCRIPT

Page 1: Web前端 安全须知 拔赤

前端安全须知拔赤 [email protected]

2010-02-26

Page 2: Web前端 安全须知 拔赤

网络安全

web前端安全

Javascript安全须知

Page 3: Web前端 安全须知 拔赤

网络安全

web前端安全

Javascript安全须知

Page 4: Web前端 安全须知 拔赤

网络安全

机密性(加密)

完整性(防伪造)

来源可靠性(签名)

程序漏洞

Page 5: Web前端 安全须知 拔赤

网络安全

web前端安全

Javascript安全须知

Page 6: Web前端 安全须知 拔赤

Web前端安全

XSSCross Site Script(跨站攻击脚本)

CSRF:

Cross Site Request Forgery(跨站伪造请求)

Page 7: Web前端 安全须知 拔赤

XSS

Page 8: Web前端 安全须知 拔赤

XSS

往Web页面里插入恶意html代码

当用户浏览该页之时,嵌入其中Web里面的html代码会被执行

Page 9: Web前端 安全须知 拔赤

XSS恶意html/js脚本

Web page

Hack.run()

程序漏洞

Page 10: Web前端 安全须知 拔赤

XSS的种类

基于DOM的XSS非持久性XSS持久性XSS基于字符集的XSS基于flash的跨站

Self-inflicted(自己造成的) XSS

未经验证的跳转构成的跨站

Cookie构成的跨站

Escape-based XSS

Page 11: Web前端 安全须知 拔赤

XSS-基于DOM的XSS

产生原因当web page含有一些不受服务器端控制的DOM的时候发生

通过form、referer、location修改页面DOM

解决方法避免客户端的脚本对DOM的重写、重定向及其它敏感的操作,需要在客户端对form输入进行过滤

Page 12: Web前端 安全须知 拔赤

document.location=…document.location.hostname=…document.location.replace(…)document.location.assign(…)document.URL=…document.referrerdocument.URLUnencodedwindow.navigate(…)window.location

URL相关操作

直接运行脚本

eval(…)window.execScript(…)window.setInterval(…)window.setTimeout(…)

可被攻击者利用的脚本

Page 13: Web前端 安全须知 拔赤

document.write(…)document.writeln(…)document.body.innerHtml=…

document.forms[0].action=…document.attachEvent(…)document.create…(…)document.execCommand(…)document.bodywindow.attachEvent(…)

直接写入html代码

直接修改DOM

document.open(…)window.open(…)window.location.href=…

打开或修改窗口

Page 14: Web前端 安全须知 拔赤

XSS-非持久性跨站

产生原因直接将form或者query(cookie)中的字符带入到页面中,危险query字符参与html的构成(query字符并不被存储)

解决方法对输入进行过滤

对输出进行编码

Page 15: Web前端 安全须知 拔赤

XSS-持久性跨站

产生原因其破坏页面html结构的原理和非持久XSS一样,只是危险脚本来源不是query字符,而是数据库数据

解决办法对输入进行过滤

对输出进行编码

Page 16: Web前端 安全须知 拔赤

XSS-基于字符集的跨站

产生原因页面字符集不固定,用户输入非期望字符集的字符,有时会绕过前端的过滤

解决办法

Web页面一定要指定字符集(GBK)

XML中不仅要指定字符集,而且标签要闭合

Page 17: Web前端 安全须知 拔赤

XSS-基于flash的跨站

产生原因

As脚本可以接受用户输入并操作cookie,攻击者可以配合其他XSS方法将恶意swf文件嵌入页面中

解决办法严格管理cookie的读写权限

对flash能接受的用户输入进行过滤和限定

Page 18: Web前端 安全须知 拔赤

XSS- Self-inflicted XSS

产生原因攻击者先把页面搞出漏洞,让其他用户再浏览这个有漏洞的页面的时候遭受攻击。

这里已经不是严格意义上的XSS了

解决方法页面登录超时

Page 19: Web前端 安全须知 拔赤

XSS-未经验证的跳转构成的跨站

产生原因如果服务器端做302跳转,跳转的地址来自用户的输入,攻击者可以输入一个恶意的跳转地址来执行脚本。

解决方法在后端来限定所接收的URL来自淘宝并做过滤

Page 20: Web前端 安全须知 拔赤

XSS-Cookie构成的跨站

产生原因破坏页面结构的原理和非持久跨站一致

Js或as可操作cookie,通过cookies提交query

解决办法一切来自客户端的cookie是不可信的,后端必须对客户端cookie做验证

Page 21: Web前端 安全须知 拔赤

XSS- Escape-based XSS

产生原因其破坏页面语义构成的原理和非持久XSS一致

使用畸形的UTF8字符串拼成URL

解决方法对输入进行过滤

对输出进行编码

Page 22: Web前端 安全须知 拔赤

CSRF

Page 23: Web前端 安全须知 拔赤

CSRF

(通过肉鸡)伪造请求

Page 24: Web前端 安全须知 拔赤

CSRF的发生

所有需要登录页面中的交互

表单提交

AJAX

Page 25: Web前端 安全须知 拔赤

CSRF的防范

临时签名(验证码、时间戳)

crumb

Page 26: Web前端 安全须知 拔赤

淘宝对CSRF的防范

在表单中指定token

在cookie中指定_tb_token_

尽量使用POST方法

Ajax时附带token

<input type=”hidden” value=”{$token}” name="_tb_token_">

Page 27: Web前端 安全须知 拔赤

网络安全

web前端安全

Javascript安全须知

Page 28: Web前端 安全须知 拔赤

Javascript安全须知

禁止使用外部引用的js,外链应当完全使用a.tbcdn.cn上的资源文件

慎用eval,setTimeout,setInterval和从不可信站点获取的字符串操作的函数。

cookies操作一定要征询后端工程师的意见,避免撑破cookies的大小限制了。

前端代码禁止获取referer,所有referer的操作由后端工程师处理。

Page 29: Web前端 安全须知 拔赤

Javascript安全须知 续

禁止发送页面相关信息到第三方站点

如果JSON返回的信息里含有用户的私密信息,需要加_tb_token_

禁止使用script标签来达到跨域访问的目的,应当使用flash实现跨域访问,可信域之间的跨域可以使用iframe

所有使用的数据必须经过服务端的验证。

js代码需要经过jslint的测试

Page 30: Web前端 安全须知 拔赤

我们还需要安全规范

页面级的html规范/标准统一的编码标准(URL/GBK/js unicode)

标签完整性

代码级的coding规范统一的ajax接口规格

页面中php/jsp和js代码的参数传递

规范的javascript编写习惯

代码review制度

Page 31: Web前端 安全须知 拔赤

Q&A