您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 程序员常见的WEB安全漏洞
程序员常见的WEB安全漏洞点苍@淘宝-新业务2010-08-300.大纲1.引子不安全的淘宝,一直被紧盯,经常被攻击•影响力–宕机、篡改页面•交易–盗取银行账号、钓鱼攻击•用户–登录密码以及cookie/refer/ip隐私2.SQL注入–简介SQL注入攻击也俗称黑客的填空游戏•定义:攻击者提交恶意SQL并得到执行•本质:由于输入检验不充分,导致非法数据被当做SQL来执行•特点:–很常见,使用数据库的应用多如牛毛–多见于小PHP站,采用字符串拼SQL的应用–直接攻击服务器2.SQL注入–危害•字符串填空–绕过登录鉴权select*fromuserwherename=‘’or‘1’=‘1’andpw=‘’or‘1’=‘1’•执行任意SQL,利用注释,select*fromitemwhreitem=‘’;yoursql--’或整型字段,select*fromitemwhereitem_id=0;yoursql;–篡改系统账号alterloginsawithpassword=‘123456’–用户隐私外泄select*fromuser–系统细节外泄select*fromsys.tables–控制操作系统xp_cmdshell“netstopiisadmin”–损害硬盘宕机xp_cmdshell“FORMATC:”–埋入XSS漏洞insertintocomment(cnt)values(‘script…/script’)2.SQL注入–防范•避免字符串拼SQL,完全使用参数化查询•将单引号字符取代为连续2个单引号字符•利用框架的防SQL注入功能2.SQL注入–iBatis1根据彩种ID和彩期名得到一个彩期,inttype=123;Stringtitle=“123”。结果:select*fromitemwheretype=123andtitle=‘123’$不过滤直接文本替换:select*fromitemwheretype=$type$andtitle=‘$title$’#根据变量类型来替换:select*fromitemwheretype=#type#andtitle=#title#•尽量使用#,避免使用$2.SQL注入–iBatis2•尽量使用#,避免使用$•若不能避免$,则带上元数据标识SQL中需要用户提交的ASC、DESC等SQL关键字select*fromuserorderbygmt_create$ordertype:SQLKEYWORD$SQL中需要用户提交的字段名、表名等元数据select*fromuserorderby$orderByColumn:METADATA$2.SQL注入–iBatis3•尽量使用#,避免使用$•若不能避免$,则带上元数据标识•用迭代替换IN关键字中的$intorderStatus={0,1,2,3}Listorders=sqlMap.queryForList(“OrderDAO.findLlOrder,orderStatus);selectid=“findOrder”parameterClass=“java.lang.Array”resultClass=“java.lang.Object”select*fromorderwhereorder_statusiniterateopen=“(“close=“)”conjunction=“,”#orderStatus[]#/iterate/select3.XSS–简介•Cross-SiteScripting,跨站脚本攻击•定义:攻击者在页面里插入恶意脚本,当用户浏览该页时,嵌入其中的恶意代码被执行,从而达到攻击者的特殊目的•实质:用户提交的HTML代码未经过滤和转义直接回显•特点:–攻击授信和未授信用户,不直接攻击服务器–很常见,例如贴图、AJAX回调、富文本(如评论留言)–恶意脚本可能位于跨站服务器,但必须用户浏览器执行,最暴力的防范就是禁用JS脚本3.XSS–实例•彩票业务AJAX回调导致的XSS漏洞=%3Cscript%3Ealert%28%27xss%27%29%3C/script%3E3.XSS–危害•挂蠕虫、木马、病毒•盗取用户的cookie/referer/ip等信息•制作钓鱼网站•用户被提交恶意数据、被执行恶意操作•帮助CSRF,绕过CSRF的token验证3.XSS–代码分析•span$!productName/span•inputtype=hiddenName=OrinSearchTextvalue=$!searchBarView.LastKeywordid=OrinSearchText_rfs$disabledFlag/•scriptvarfromgcn='$!rundata.Parameters.getString('fromgcn')';/script•spaniframesrc=•inputtype=hiddenName=OrinSearchTextvalue=iframesrc==OrinSearchText_rfs$disabledFlag/•scriptvarfromgcn='';hackerFunction(document.cookie);'';/script3.XSS–防范•输入过滤,RichTextXssFilter.filter(input)•输出转义,HTMLESCAPE4.CSRF–简介•CrossSiteRequestForgery,即跨站请求伪造,有时也缩写为XSRF•定义:在恶意站点上,促使用户请求有CSRF漏洞的应用的URL或欺骗性的表单,从而修改用户数据•实质:利用session机制,盗用授信用户对应用做一些恶意的GET/POST提交•特点:–不同于XSS,恶意脚本一定位于跨站服务器–攻击授信用户,不直接攻击服务器–近年增多,授信用户的贴图、表单提交、页面交互、AJAX调用都可能导致该漏洞4.CSRF–实例1.黑客在服务器端编写恶意脚本,并构造授信操作的URL,例如评论2.恶意用户回复帖子时候贴图,图片地址指向黑客事先编写的恶意脚本3.当用户浏览这些帖子时,就会请求该图片,不知觉访问了恶意脚本4.恶意脚本利用302重定向,根据帖子不同跳转到对应的评论URL5.用户在不知情情况下发表了评论,帮恶意用户顶贴6.所以,论坛一般会让用户在评论时输入验证码,来防止类似攻击4.CSRF–危害•获得管理员权限•盗取用户银行卡、信用卡信息•授信用户被提交恶意数据、被执行恶意操作4.CSRF–防范•服务器区分GET/POST,增加攻击难度•REFERER校验,补充手段•改长授信为短授信–时间戳–关键流程使用验证码–Token验证•严防XSS,否则短授信可能被伪造5.其它漏洞•命令行注入•文件上传漏洞•缓冲区溢出•DDoS•访问控制漏洞•LogicFlaw,逻辑漏洞•无限制URL跳转漏洞•表单重复提交•Struts/Webwork远程命令执行漏洞6.安全开发流程•提高安全开发意识•遵守安全编码规范•引入WEB安全测试•逆向思维,从黑客角度发现潜在的漏洞网络安全≠WEB安全≠XSS≠alert7.黑客攻击思路•找漏洞–分析产品或开源代码–浏览器、操作系统的0day漏洞•编写恶意脚本•蛊惑用户访问恶意链接,执行恶意脚本完成攻击–得到用户隐私–拿管理员权限–钓鱼网站–挂木马9.安全开发Checklist安全分类项目自检必选SQL注入iBatis中使用的$变量是否都有元数据标识*XSSwebx里是否配置了vm模板的自动XSS输出转义*vm模板以外的回显内容是否有显式的输入过滤输出转义*贴图功能是否有防XSS考虑*再次确认没有遗漏的搜索框、评论、AJAX回调等XSS高发区CSRF关键业务是否有验证码校验授信操作是否都有token校验*贴图功能是否有防CSRF考虑*其它所用的数据库、操作系统账户是否有过高的权限*所用的struts2是否修复了远程命令执行漏洞*上传文件功能是否考虑了安全防范*向导类操作是否都有对前一步骤结果的校验*考虑并解决了表单重复提交漏洞*与第三方合作的接口是否考虑了安全防范*URL跳转是否有白名单限制*10.参考文献•SQLINJECTIONSQL注入•iBATIS使用$和#的一些理解•XSSWikipedia•不能忽视的XSS漏洞•CSRFWikipedia•GoogleGMailE-mailHijackTechnique•Struts2/XWork2.2.0远程执行任意代码漏洞分析及修补•Struts2和Webwork远程命令执行漏洞分析
本文标题:程序员常见的WEB安全漏洞
链接地址:https://www.777doc.com/doc-3773302 .html