web前端 安全须知 拔赤
TRANSCRIPT
网络安全
web前端安全
Javascript安全须知
网络安全
web前端安全
Javascript安全须知
网络安全
机密性(加密)
完整性(防伪造)
来源可靠性(签名)
程序漏洞
网络安全
web前端安全
Javascript安全须知
Web前端安全
XSSCross Site Script(跨站攻击脚本)
CSRF:
Cross Site Request Forgery(跨站伪造请求)
XSS
XSS
往Web页面里插入恶意html代码
当用户浏览该页之时,嵌入其中Web里面的html代码会被执行
XSS恶意html/js脚本
Web page
Hack.run()
程序漏洞
XSS的种类
基于DOM的XSS非持久性XSS持久性XSS基于字符集的XSS基于flash的跨站
Self-inflicted(自己造成的) XSS
未经验证的跳转构成的跨站
Cookie构成的跨站
Escape-based XSS
XSS-基于DOM的XSS
产生原因当web page含有一些不受服务器端控制的DOM的时候发生
通过form、referer、location修改页面DOM
解决方法避免客户端的脚本对DOM的重写、重定向及其它敏感的操作,需要在客户端对form输入进行过滤
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(…)
可被攻击者利用的脚本
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=…
打开或修改窗口
XSS-非持久性跨站
产生原因直接将form或者query(cookie)中的字符带入到页面中,危险query字符参与html的构成(query字符并不被存储)
解决方法对输入进行过滤
对输出进行编码
XSS-持久性跨站
产生原因其破坏页面html结构的原理和非持久XSS一样,只是危险脚本来源不是query字符,而是数据库数据
解决办法对输入进行过滤
对输出进行编码
XSS-基于字符集的跨站
产生原因页面字符集不固定,用户输入非期望字符集的字符,有时会绕过前端的过滤
解决办法
Web页面一定要指定字符集(GBK)
XML中不仅要指定字符集,而且标签要闭合
XSS-基于flash的跨站
产生原因
As脚本可以接受用户输入并操作cookie,攻击者可以配合其他XSS方法将恶意swf文件嵌入页面中
解决办法严格管理cookie的读写权限
对flash能接受的用户输入进行过滤和限定
XSS- Self-inflicted XSS
产生原因攻击者先把页面搞出漏洞,让其他用户再浏览这个有漏洞的页面的时候遭受攻击。
这里已经不是严格意义上的XSS了
解决方法页面登录超时
XSS-未经验证的跳转构成的跨站
产生原因如果服务器端做302跳转,跳转的地址来自用户的输入,攻击者可以输入一个恶意的跳转地址来执行脚本。
解决方法在后端来限定所接收的URL来自淘宝并做过滤
XSS-Cookie构成的跨站
产生原因破坏页面结构的原理和非持久跨站一致
Js或as可操作cookie,通过cookies提交query
解决办法一切来自客户端的cookie是不可信的,后端必须对客户端cookie做验证
XSS- Escape-based XSS
产生原因其破坏页面语义构成的原理和非持久XSS一致
使用畸形的UTF8字符串拼成URL
解决方法对输入进行过滤
对输出进行编码
CSRF
CSRF
(通过肉鸡)伪造请求
CSRF的发生
所有需要登录页面中的交互
表单提交
AJAX
CSRF的防范
临时签名(验证码、时间戳)
crumb
淘宝对CSRF的防范
在表单中指定token
在cookie中指定_tb_token_
尽量使用POST方法
Ajax时附带token
<input type=”hidden” value=”{$token}” name="_tb_token_">
网络安全
web前端安全
Javascript安全须知
Javascript安全须知
禁止使用外部引用的js,外链应当完全使用a.tbcdn.cn上的资源文件
慎用eval,setTimeout,setInterval和从不可信站点获取的字符串操作的函数。
cookies操作一定要征询后端工程师的意见,避免撑破cookies的大小限制了。
前端代码禁止获取referer,所有referer的操作由后端工程师处理。
Javascript安全须知 续
禁止发送页面相关信息到第三方站点
如果JSON返回的信息里含有用户的私密信息,需要加_tb_token_
禁止使用script标签来达到跨域访问的目的,应当使用flash实现跨域访问,可信域之间的跨域可以使用iframe
所有使用的数据必须经过服务端的验证。
js代码需要经过jslint的测试
我们还需要安全规范
页面级的html规范/标准统一的编码标准(URL/GBK/js unicode)
标签完整性
代码级的coding规范统一的ajax接口规格
页面中php/jsp和js代码的参数传递
规范的javascript编写习惯
代码review制度
Q&A