170 likes | 303 Views
前端顽疾. xss 漏洞分析与解决. 顽疾的诊断 ---- 认清危害. 1 、 XSS 漏洞的危害并不因为页面访问量不高而减少。 2 、 XSS 漏洞等于获得了页面的最高管理权限 3 、 XSS 漏洞无需入侵服务器因而有较高的隐密性 4 、 XSS 漏洞扫描通过不代表就没有 XSS 漏洞 5 、后台 CGI 逐渐成为 XSS 攻击主要目标 备注:黑客攻击手段很多, XSS 主要被用于欺骗用户信任,一旦跳转到黑客页面用户的安全则得不到保障。. 顽疾的诊断 ---- 了解漏洞原理 1. 非持久性 XSS 攻击. 顽疾的诊断 ---- 了解漏洞原理 2.
E N D
前端顽疾 xss漏洞分析与解决
顽疾的诊断----认清危害 1、XSS漏洞的危害并不因为页面访问量不高而减少。2、XSS漏洞等于获得了页面的最高管理权限3、XSS漏洞无需入侵服务器因而有较高的隐密性 4、XSS漏洞扫描通过不代表就没有XSS漏洞 5、后台CGI逐渐成为XSS攻击主要目标 备注:黑客攻击手段很多,XSS主要被用于欺骗用户信任,一旦跳转到黑客页面用户的安全则得不到保障。
顽疾的诊断----了解漏洞原理1 非持久性XSS 攻击
顽疾的诊断----了解漏洞原理2 持久性XSS 攻击
顽疾的诊断----案例分析1 http://member1.taobao.com/member/loginByIm.do?&errurl=http://www.koubei.com/export/cate/getstorecardhtml.html?callback=%3Cscript%3Elocation.href='http://gw.afufwtoin.com/a.taobao.com/tb1.asp?idc=7095';%3C%2Fscript%3E 攻击代码:%3Cscript%3Elocation.href='http://gw.afufwtoin.com/a.taobao.com/tb1.asp?idc=7095';%3C%2Fscript%3E
顽疾的诊断----案例分析2 1、http://product.tech.qq.com/simp_search.php?locationid=1&subcatid=27&manuid=0&keyword=</script><script>alert(42)</script>&bgcolor=ffffff&status=1 2、http://t.qq.com/p/worldcup?g=1"><script>alert(document.domain)</script> 3、http://t.qq.com/p/city?s=44&c=3"><script>alert(1)</script><" 4、http://help.paipai.com/mutually_help_null.shtml?query=%3Cscript%3Ealert%281%29%3C/script%3E 信息来源:http://wooyun.org/corps/%E8%85%BE%E8%AE%AF
顽疾的治疗----了解js的执行环境 • document.write “<script>alert('xss')</script>”; • innerHTML= "<script>alert('xss')</script>" 不执行 • 明文出现的"</script>"将结束"<script>",哪怕是在字符串中。 • html标签的 onload,onerror,onchange…… • on load 中间加入空白字符、特殊字符、换行符依然能够被识别为 onload • JaVaScRiPt 大小写一样能够被执行 • j, 等UTF-8字符也可以被转义后执行 • css expression • link,img,style引入非JS后缀的js文件
顽疾的治疗----层层过滤 • 接收参数时:过滤危险代码、限定可处理参数范围 • 前台提交前:过滤危险代码、对HTML进行转义 • 后台接受后:过滤危险代码、对HTML进行转义 • 后台输出前:过滤危险代码、过滤自定义回调函数名 • 前台输出前:过滤危险代码、避免使用document.write • 反跳页面:只对可信域和白名单进行跳转
顽疾的治疗----对症下药 URL参数:不应该带有任何可执行代码,因而强制过滤关键字,对其中符号“+”、“-”、“<”、“>”、“'”、“"”、“/”、“&”、“$”进行转义:encodeURIComponent()说明:escape()不编码的字符:@*/+encodeURI() 不编码的字符: ~!@&;*()=:/,;?+''encodeURIComponent()不编码的字符: ~!*()''
顽疾的治疗----对症下药 自定义回调函数名: 作为JS自定义回调函数名,只应该包含 英文、数字、符号:“.”、“_”,其余皆为非法字符应予以过滤。 说明: &callback=window.callback1 &callback=window.spuInfoCB &callback=</script><script>alert('xss')</script>
顽疾的治疗----对症下药 HTML代码过滤: 所有符号应转化为HTML字符实体 说明:
顽疾的治疗----对症下药 范例: 后台数据: { nickName:"<u>昊</u>", uin:"316448" } 模板: <div> <p>{#nickName#}</p> <p>{#uin#}</p> </div>
顽疾的治疗----对症下药 后台数据: { nickName:"<u>昊</u>", uin:"316448" } 转化后: { nickName:"<u>昊</u>", uin:"316448" }
顽疾的预防----警惕疫区 • 搜索关键词 • 用户昵称 • 富文本编辑器 • url跳转 • cgi自定义回调函数
XSS测试用例分析 http://ha.ckers.org/xss.html
参考资料 安全漏洞http://wooyun.org/corps/%E8%85%BE%E8%AE%AF XSS测试用例http://ha.ckers.org/xss.html HTML实体表 http://www.w3schools.com/cn/tags/ref_entities.asp