程序员常见的WEB安全漏洞<br />点苍@淘宝-新业务<br />2010-08-30<br />
0.大纲<br />
1.引子<br />不安全的淘宝,一直被紧盯,经常被攻击<br /><ul><li>影响力 – 宕机、篡改页面
交易– 盗取银行账号、钓鱼攻击
用户 – 登录密码以及cookie/refer/ip隐私</li></li></ul><li>2.SQL注入 – 简介<br />定义:攻击者提交恶意SQL并得到执行<br />本质:由于输入检验不充分,导致非法数据被当做SQL来执行<br /...
2.SQL注入 – 危害<br />字符串填空<br />绕过登录鉴权   select * from user where name=‘’ or ‘1’=‘1’ and pw=‘’ or ‘1’=‘1’<br />执行任意SQL,利用注释,s...
2.SQL注入 – 防范<br />避免字符串拼SQL,完全使用参数化查询<br />将单引号字符取代为连续2个单引号字符<br />利用框架的防SQL注入功能<br />
2.SQL注入 – iBatis 1<br />尽量使用#,避免使用$<br />根据彩种ID和彩期名得到一个彩期,inttype=123; String title=“123”。 <br />结果:<br />select * from it...
2.SQL注入 – iBatis 2<br />尽量使用#,避免使用$<br />若不能避免$,则带上元数据标识<br />SQL中需要用户提交的ASC、DESC等SQL关键字<br />select * from user order by ...
2.SQL注入 – iBatis 3<br />尽量使用#,避免使用$<br />若不能避免$,则带上元数据标识<br />用迭代替换IN关键字中的$<br />int orderStatus = {0,1,2,3}              ...
3.XSS – 简介<br />Cross-Site Scripting,跨站脚本攻击<br />定义:攻击者在页面里插入恶意脚本,当用户浏览该页时,嵌入其中的恶意代码被执行,从而达到攻击者的特殊目的<br />实质:用户提交的HTML代码未经...
3.XSS – 实例<br />彩票业务AJAX回调导致的XSS漏洞http://caipiao.taobao.com/lottery/order/getDcSpInfoAjax.htm?callback=%3Cscript%3Ealert%2...
3.XSS – 危害<br />挂蠕虫、木马、病毒<br />盗取用户的cookie/referer/ip等信息<br />制作钓鱼网站<br />用户被提交恶意数据、被执行恶意操作<br />帮助CSRF,绕过CSRF的token验证<br />
3.XSS – 代码分析<br /><span>$!productName</span><br /><input type="hidden" Name="OrinSearchText" value="$!searchBarView.LastKe...
3.XSS – 防范<br />输入过滤,RichTextXssFilter.filter(input)<br />输出转义,HTML ESCAPE<br />
4.CSRF – 简介<br />Cross Site Request Forgery,即跨站请求伪造,有时也缩写为XSRF<br />定义: 在恶意站点上,促使用户请求有CSRF漏洞的应用的 URL或欺骗性的表单,从而修改用户数据<br />...
4.CSRF – 实例<br />黑客在服务器端编写恶意脚本,并构造授信操作的URL,例如评论<br />恶意用户回复帖子时候贴图,图片地址指向黑客事先编写的恶意脚本<br />当用户浏览这些帖子时,就会请求该图片,不知觉访问了恶意脚本<br ...
4.CSRF – 危害<br />获得管理员权限<br />盗取用户银行卡、信用卡信息<br />授信用户被提交恶意数据、被执行恶意操作<br />
4.CSRF – 防范<br />服务器区分GET/POST,增加攻击难度<br />REFERER校验,补充手段<br />改长授信为短授信<br />时间戳<br />关键流程使用验证码<br />Token验证<br />严防XSS,否则...
5.其它漏洞<br />命令行注入<br />文件上传漏洞<br />缓冲区溢出<br />DDoS<br />访问控制漏洞<br />Logic Flaw,逻辑漏洞<br />无限制URL跳转漏洞<br />表单重复提交<br />Strut...
6.安全开发流程<br />提高安全开发意识<br />遵守安全编码规范<br />引入WEB安全测试<br />逆向思维,从黑客角度发现潜在的漏洞<br />网络安全 ≠ WEB安全 ≠ XSS ≠ alert<br />
7.黑客攻击思路<br />找漏洞<br />分析产品或开源代码<br />浏览器、操作系统的0day漏洞<br />编写恶意脚本<br />蛊惑用户访问恶意链接,执行恶意脚本完成攻击<br />得到用户隐私<br />拿管理员权限<br />...
9.安全开发Checklist<br />
10.参考文献<br />SQL INJECTION SQL注入<br />iBATIS使用$和#的一些理解<br />XSS Wikipedia<br />不能忽视的XSS漏洞<br />CSRF Wikipedia<br />Google ...
Upcoming SlideShare
Loading in …5
×

程序员常见的Web安全漏洞

3,985 views

Published on

Published in: Technology
  • ss
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

程序员常见的Web安全漏洞

  1. 1. 程序员常见的WEB安全漏洞<br />点苍@淘宝-新业务<br />2010-08-30<br />
  2. 2. 0.大纲<br />
  3. 3. 1.引子<br />不安全的淘宝,一直被紧盯,经常被攻击<br /><ul><li>影响力 – 宕机、篡改页面
  4. 4. 交易– 盗取银行账号、钓鱼攻击
  5. 5. 用户 – 登录密码以及cookie/refer/ip隐私</li></li></ul><li>2.SQL注入 – 简介<br />定义:攻击者提交恶意SQL并得到执行<br />本质:由于输入检验不充分,导致非法数据被当做SQL来执行<br />特点:<br />很常见,使用数据库的应用多如牛毛<br />多见于小PHP站,采用字符串拼SQL的应用<br />直接攻击服务器<br />SQL注入攻击也俗称黑客的填空游戏<br />
  6. 6. 2.SQL注入 – 危害<br />字符串填空<br />绕过登录鉴权 select * from user where name=‘’ or ‘1’=‘1’ and pw=‘’ or ‘1’=‘1’<br />执行任意SQL,利用注释,select * from item whre item=‘’;your sql--’或整型字段,select * from item where item_id=0;your sql;<br />篡改系统账号 alter login sa with password=‘123456’<br />用户隐私外泄 select * from user<br />系统细节外泄 select * from sys.tables<br />控制操作系统 xp_cmdshell “net stop iisadmin”<br />损害硬盘宕机 xp_cmdshell “FORMAT C:”<br />埋入XSS漏洞insert into comment(cnt) values(‘<script>…</script>’)<br />
  7. 7. 2.SQL注入 – 防范<br />避免字符串拼SQL,完全使用参数化查询<br />将单引号字符取代为连续2个单引号字符<br />利用框架的防SQL注入功能<br />
  8. 8. 2.SQL注入 – iBatis 1<br />尽量使用#,避免使用$<br />根据彩种ID和彩期名得到一个彩期,inttype=123; String title=“123”。 <br />结果:<br />select * from itemwhere type=123 and title=‘123’ <br />$不过滤直接文本替换:<br />select * from item where type=$type$ and title=‘$title$’ <br />#根据变量类型来替换:<br />select * from item where type=#type# and title=#title#<br />
  9. 9. 2.SQL注入 – iBatis 2<br />尽量使用#,避免使用$<br />若不能避免$,则带上元数据标识<br />SQL中需要用户提交的ASC、DESC等SQL关键字<br />select * from user order by gmt_create  $ordertype:SQLKEYWORD$<br />SQL中需要用户提交的字段名、表名等元数据<br />select * from user order by $orderByColumn:METADATA$<br />
  10. 10. 2.SQL注入 – iBatis 3<br />尽量使用#,避免使用$<br />若不能避免$,则带上元数据标识<br />用迭代替换IN关键字中的$<br />int orderStatus = {0,1,2,3}                  <br />List orders = sqlMap.queryForList(“OrderDAO.findLlOrder", orderStatus);    <br /><select id=“findOrder” parameterClass=“java.lang.Array” resultClass=“java.lang.Object”> select * from order where order_status in       <br />    <iterate open=“(“ close=“)” conjunction=“,”>      <br />        #orderStatus[]#      <br />    </iterate>      <br /></select>   <br />
  11. 11. 3.XSS – 简介<br />Cross-Site Scripting,跨站脚本攻击<br />定义:攻击者在页面里插入恶意脚本,当用户浏览该页时,嵌入其中的恶意代码被执行,从而达到攻击者的特殊目的<br />实质:用户提交的HTML代码未经过滤和转义直接回显<br />特点:<br />攻击授信和未授信用户,不直接攻击服务器<br />很常见,例如贴图、 AJAX回调、富文本(如评论留言)<br />恶意脚本可能位于跨站服务器,但必须用户浏览器执行,最暴力的防范就是禁用JS脚本<br />
  12. 12. 3.XSS – 实例<br />彩票业务AJAX回调导致的XSS漏洞http://caipiao.taobao.com/lottery/order/getDcSpInfoAjax.htm?callback=%3Cscript%3Ealert%28%27xss%27%29%3C/script%3E<br />
  13. 13. 3.XSS – 危害<br />挂蠕虫、木马、病毒<br />盗取用户的cookie/referer/ip等信息<br />制作钓鱼网站<br />用户被提交恶意数据、被执行恶意操作<br />帮助CSRF,绕过CSRF的token验证<br />
  14. 14. 3.XSS – 代码分析<br /><span>$!productName</span><br /><input type="hidden" Name="OrinSearchText" value="$!searchBarView.LastKeyword" id="OrinSearchText_rfs" $disabledFlag /><br /><script>varfromgcn = '$!rundata.Parameters.getString('fromgcn')';</script><br /><span><iframesrc=http://hacker.com></iframe></span><br /><input type="hidden" Name="OrinSearchText" value="" ><iframesrc=http://hacker.com></iframe>< "" id="OrinSearchText_rfs" $disabledFlag /><br /><script>varfromgcn = '';hackerFunction(document.cookie);''; </script><br />
  15. 15. 3.XSS – 防范<br />输入过滤,RichTextXssFilter.filter(input)<br />输出转义,HTML ESCAPE<br />
  16. 16. 4.CSRF – 简介<br />Cross Site Request Forgery,即跨站请求伪造,有时也缩写为XSRF<br />定义: 在恶意站点上,促使用户请求有CSRF漏洞的应用的 URL或欺骗性的表单,从而修改用户数据<br />实质:利用session机制,盗用授信用户对应用做一些恶意的GET/POST提交<br />特点:<br />不同于XSS,恶意脚本一定位于跨站服务器<br />攻击授信用户,不直接攻击服务器<br />近年增多,授信用户的贴图、表单提交、页面交互、AJAX调用都可能导致该漏洞<br />
  17. 17. 4.CSRF – 实例<br />黑客在服务器端编写恶意脚本,并构造授信操作的URL,例如评论<br />恶意用户回复帖子时候贴图,图片地址指向黑客事先编写的恶意脚本<br />当用户浏览这些帖子时,就会请求该图片,不知觉访问了恶意脚本<br />恶意脚本利用302重定向,根据帖子不同跳转到对应的评论URL<br />用户在不知情情况下发表了评论,帮恶意用户顶贴<br />所以,论坛一般会让用户在评论时输入验证码,来防止类似攻击<br />
  18. 18. 4.CSRF – 危害<br />获得管理员权限<br />盗取用户银行卡、信用卡信息<br />授信用户被提交恶意数据、被执行恶意操作<br />
  19. 19. 4.CSRF – 防范<br />服务器区分GET/POST,增加攻击难度<br />REFERER校验,补充手段<br />改长授信为短授信<br />时间戳<br />关键流程使用验证码<br />Token验证<br />严防XSS,否则短授信可能被伪造<br />
  20. 20. 5.其它漏洞<br />命令行注入<br />文件上传漏洞<br />缓冲区溢出<br />DDoS<br />访问控制漏洞<br />Logic Flaw,逻辑漏洞<br />无限制URL跳转漏洞<br />表单重复提交<br />Struts/Webwork远程命令执行漏洞<br />
  21. 21. 6.安全开发流程<br />提高安全开发意识<br />遵守安全编码规范<br />引入WEB安全测试<br />逆向思维,从黑客角度发现潜在的漏洞<br />网络安全 ≠ WEB安全 ≠ XSS ≠ alert<br />
  22. 22. 7.黑客攻击思路<br />找漏洞<br />分析产品或开源代码<br />浏览器、操作系统的0day漏洞<br />编写恶意脚本<br />蛊惑用户访问恶意链接,执行恶意脚本完成攻击<br />得到用户隐私<br />拿管理员权限<br />钓鱼网站<br />挂木马<br />
  23. 23. 9.安全开发Checklist<br />
  24. 24. 10.参考文献<br />SQL INJECTION SQL注入<br />iBATIS使用$和#的一些理解<br />XSS Wikipedia<br />不能忽视的XSS漏洞<br />CSRF Wikipedia<br />Google GMail E-mail Hijack Technique<br />Struts2/XWork < 2.2.0远程执行任意代码漏洞分析及修补<br />Struts2和Webwork远程命令执行漏洞分析<br />

×