Web 安全之PHP 代码审查
在代码审计的过程中最不可少的就是代码审计工具,学会使用代码审计工具是一个必备的能力,同时也可以提高审计工作效率。以下就是给大家介绍的代码审计中比较好用的工具。
一、审计工具介绍
1、RIPS
PHP代码审计系统-RIPS是一款静态源代码分析工具,也是一款开源软件,主要用来挖掘PHP程序漏洞的自动化代码审计工具。它最大的特点在于它不仅仅在于调用了 PHP 内置解析器接口token_get_all,而且还使用Parser语法分析,实现了全方位的追踪,能够直观直白的看到变量之间的传递及其过程结果,这样也使得误报率大大降低。RIPS 的主要功能特点是能够发现 SQL、XSS 注入、文件泄露等多种漏洞,通过可视化的图表展示代码执行,支持多种样式的语法高亮显示模式。除此以外它还可以标记存在漏洞的代码行,而且只要是有PHP的本地服务器和浏览器就可以下载使用。
下载连接:
https://jaist.dl.sourceforge.net/project/rips-scanner/rips-0.55.zip.
然后解压下载的zip文件到Web服务器网站目录下或者任意一个PHP的运行目录即可。在浏览器中输入对应网址,然后在RIPS的“path”选项里面填写你要分析的项目文件路径,点击“scan”按钮开始扫描任务。
2、Seay 源代码审计系统
seay 源代码审计系统方便用于审计分析网站。它的功能特点有很多,其中就包括自定义审计规则,自动审计生成审计报告,属于傻瓜化的自动审计,它还可以
函数/变量定位,支持PHP代码调试等多种功能。但是Seay进行审计最主要的方法就是正则匹配,就是通过使用一些容易造成漏洞的函数语句去匹配源码中是否存在的审计机制。
下载连接:
http://enkj.jb51.net:81/201408/tools/Seayydmsjxt(jb51.net).rar
需要注意的是它的安装环境需要.NET2.0以上版本环境才可以运行,但是下载过程十分简单,只用点击下一步即可,且下载安装.net相关组件即可正常使用,
二、代码审计实战
通过对以上两个审计工具的解说也会发现它们还是存在不足,会分析出很多隐藏的漏洞,例如:XSS、CSRF以及SQL注入漏洞。想要做好审计代码那就需要知道它们产生的原因,以下就是对产生这些原因的分析。
1、Xss漏洞
XSS也是CSS (Cross Site Script) 是跨站脚本攻击。它是通过将恶意html代码嵌入Web里面,当用户使用Web时恶意代码就会执行,以此来达到目的。但是因为XSS不会主动攻击,所以人们往往会忽略其危害性,但这种隐形的危害也会一直存在,所以还是需要提高警惕。
(1)危害以及分类
常见的XSS漏洞分为存储型、反射型、DOM型三种。其中存储型XSS是三种XSS里危害最大的一种。XSS漏洞会发送攻击代码,然后侵入后台读取数据,窃取用户的个人信息,还会利用漏洞发送垃圾广告,对户安全产生巨大的威胁,严重影响到用户的正常使用。
①反射型XSS
反射型XSS就是通过用户访问连接时,发送带有恶意脚本代码将其植入URL里面,当URL地址被打开时,服务器会将它携带的代码参数进行解析判断,那XSS攻击代码就会一起被传输到用户的浏览器上,如果用户点击了包含XSS的代码连接,那用户的信息就可以被盗取,甚至可以利用用户信息进行操作。
这种类型是需要用户点击链接才会触发,所以叫做反射型XSS,尽管它的危害不大但是产生的危害不容忽视。
②存储型XSS
存储型XSS常常出现用户评论的页面,它是由于恶意攻击代码被植入服务器中,然后被显示到HTML页面之中的。所以当用户再次访问这个页面时,就会触发执行恶意的XSS代码,然后窃取用户的个人信息。
这种类型的影响时间会持续较长,且危害性较大。
③DOM型XSS
DOM型 XSS 是因为 JavaScript 执行了DOM 操作,触发XSS靠的是浏览器端的DOM解析。它和上面两种有本质上的区别,它不需要通过服务器解析响应,他可以直接访问浏览器的DOM上并修改上面的内容。
(2)漏洞防范
可以采用特殊字符HTML实体转义。建议最好的是在入口处转义,避免忘记。也可以建立属性黑白名单。最好使用白名单,这样可以减少有漏掉的可能性。
2、CSRF漏洞
CSRF:跨站请求伪造,也被称为“One Click Attack”或者Session Riding,是一种对网站的恶意利用,它更加难以防范,所以比XSS更具危险性。他主要是通过伪造连接并发送给用户,所以一旦用户点击链接,则攻击就已经完成。
(1)漏洞防范
首先最主要的就是不要在客户端保护敏感信息,这样被盗取的几率会小很多,还有就是可以分配一个随机码,也就是token值,每次提交时都会同时提交生成的token值,后台验证系统需要对token值进行验证,检查是否携带有token值,提交的token值是否一样,一样就会允许提交,不一样就不提交并同时将其销毁掉,生成一个新的token值,这样每次页面一刷新,就会有新token的生成,也就实现了一对一的验证。
3、SQL注入漏洞
SQL注入是网站存在最多也是最简单的漏洞,从利用方式角度可以分为两种类型:常规注入、宽字节注入。
常规注入方式非常容易发现,它不带有任何过滤,是直接把参数存放到了SQL语句当中。编码注入方式是通过SQL命令注入到数据层从而影响执行预定的SQL命令。
(1)漏洞类型
①可显
攻击者可以直接在当前界面内容中获取想要获得的内容。
②报错
数据库查询返回结果并没有在页面中显示,但是应用程序将数据库报错信息打印到了页面中。
所以攻击者可以构造数据库报错语句,从报错信息中获取想要获得的内容,所以我建议在数据库类中设置不抛出错误信息。
③盲注
数据库查询结果无法从直观页面中获取攻击者通过使用数据库逻辑或使数据库库执行延时等方法获取想要获得的内容。
(2)防范方法
虽然SQL注入漏洞普遍较多,但是防范方法也较为简单方便。以下就是过滤函数和类:gpc/rutime 魔术引号,过滤函数和类addslashes、mysql_real_escape_stringintval、PDO 预处理等。
三、常规漏洞的防范方法
可以通过使用taint PHP 安全扩展来解决。Taint 可以用来检测隐藏的XSS code, SQL注入, Shell注入等漏洞,拓展启用后可以监控某些关键函数是否直接使用了没有经过特殊处理的字符串。
下载安装网址: http://pecl.php.net/package/taint
配置:
/usr/local/php/bin/phpize
./configure--with-php-config=/usr/local/php/bin/php-config
make && make install
如果想要更加详细的可以参考以下内容:
http://www.cnblogs.com/linzhenjie/p/5485474.html
在应用场景上因为每个人的要求不同,所以都做到非常安全是比较难的,但是可以把taint安装在开发环境中。
ngx_lua_waf :它的目的就是防止sql注入,svn/备份之类文件泄漏,ApacheBench之类压力测试工具的攻击,也可以防止webshell上传,同时屏蔽异常的网络请求,常见的扫描黑客工具,扫描器以及图片附件类目录php执行权限,fuzzing测试,xss,SSRF等web攻击。
若想要安装,则需要在nginx.conf里的http添加配置,安装nginx、ngx_lua_waf
安装依赖: luajit 、ngx_devel_kit、nginx_lua_module