Page1新浪WEB开发安全培训网络系统部:孟卓MSN:links@live.comE-mail:mengzhuo@staff.sina.com.cn互联网攻击趋势(统计来自computer.org)Page2脚本安全编程重要性前言1.问题为什么会存在2.代码安全的本质是什么3.如何发现与解决这些问题Page3问题为什么会存在?1.来自开发者本身对安全认识的不足,逻辑不严谨,编写失误,思维盲区2.来自于语言本身配置错误,函数的安全隐患,安全措施的绕过Page4代码安全的本质变量来自哪里1.显示输入$_GET$_POST$_COOKIE$_SESSION$_SERVER...Page52.隐式输入来自于数据库来自于配置文件来自于缓存文件...Page6代码安全的本质哪里是不安全的1query函数导致Sql注射漏洞2echo等函数导致的Xss跨站脚本漏洞3文件操作函数导致的文件遍历等写文件漏洞4文件包含函数如include与require导致的远程以及本地包含漏洞5命令执行函数如system等导致的命令执行6eval与preg_replace函数导致的代码执行漏洞7传递不正确的参数给某些函数可能导致绝对路径泄露……Page7代码安全的本质过滤与饶过过滤1.Php的安全机制2.Php的安全函数(Addslashes)3.什么是敏感字符4.如何过滤(二次转义)5.注意的一些问题(白名单和黑名单,阻止还是纠正,单引号和双引号)Page8代码安全的本质GPC的绕过GET/gpc.php?a=sina'HTTP/1.1Accept:*/*Accept-Language:zh-cnAccept-Encoding:gzip,deflateUser-Agent:Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1)Host:127.0.0.1Connection:Keep-AliveX-Forwarded-For:'Sina'Referer:'Sina'Page9代码安全的本质Page10代码安全的本质二次攻击二次攻击攻击者提交的恶意代码不是直接通过一个变量提交到漏洞函数,而是通过变量转化或者中转,最终提交到漏洞函数.传统过滤思想的挑战A.单纯的防止某类型漏洞变量的过滤B.突破magic_quotes_gpc=onPage11代码安全的本质preg_replace+/e漏洞Preg_repace()当第一个参数的正则表达式有e符号的时候,第二个参数的字符串当做PHP代码执行。?php$h=$_GET['h'];echopreg_replace(/test/e,$h,onlyatest);?=phpinfo()Page12代码安全的本质Page13代码安全的本质其他的问题1.在脚本层次之上的人的逻辑思维问题(修改密码的时候不需要旧密码和uid匹配等)2.在底层的php语言本身的问题(unset等问题)Page14代码安全的本质WEB安全新挑战-XSSWROM一段真实的XSSWROM统计数据Page15代码安全的本质XSS类型动态(inurl)静态(inDB)隐态(inIE)xss特点继承浏览器权限社会工程,被动攻击影响广泛(只要浏览器支持JS,HTML)隐蔽,难以察觉Page16代码安全的本质Page17如何编写安全的代码较为常见的利用方法1.IFRAME,JS,CSS挂马2.Cookies,SesionID盗窃3.浏览器劫持,继承权限提交表单4.拒绝服务5.涂鸦网页6.钓鱼7.......Page18如何编写安全的代码XSS可能出现在哪?1.HTML标签外部2.HTML标签内部3.HTML标签属性4.HTML标签事件5.输入到javascript代码Page19如何编写安全的代码XSS防范1.时刻记得过滤好任何参数,特别是处理一些危险的标记时更要小心。2.把用户的输入局限在“”之间3.全力保护好自己的属性和事件Page20如何编写安全的代码一个好的编程技巧定义一个过滤非法字符的函数,比如security(),然后在check.php中检查提交方式,比如:$_POST=security($_POST);$_GET=security($_GET);等,然后在需要检查输入的文件include这个check.php类似于一些ASP的防注入系统Page21如何编写安全的代码安全编程四个要素1.任何用户的输入都是不安全的2.过滤数据远远没有限制输入安全3.最少的服务+最小的权限=最大的安全4.保持清晰的思维Page22如何编写安全的代码谢谢!Page23