PHP Taint – 一个用来检测XSS/SQL/Shell注入漏洞的扩展

之前, 小顿和我提过一个想法, 就是从PHP语言层面去分析,找出一些可能的注入漏洞代码. 当时我一来没时间, 而来也确实不知道从何处下手.. 直到上周的时候, 我看到了这个RFC: RFC:Taint. 但是这个RFC的问题在于, 它需要为PHP打Patch, 修改了PHP本身的数据结构, 这对于以后维护, 升级PHP来说, 很不方便, 也会有一些隐患. 虽然这样, 但这个RFC却给了我一个启发, 于是我就完成了这样的一个扩展:Taint Extension 这个扩展使用起来, 很简单(目前只支持5.2.6 ~ 5.3.10): 下载源代码以后, 编译, 安装. 然后在php.ini中要开启这个扩展(建议不要在生产环境开启这个扩展): extension=taint.so taint.enable=1 启用这个扩展以后, 如果在一些关键函数(或者语句: echo, print, system, exec, 等等), 或者输出的地方*直接*(没有经过转义, 安全过滤处理)使用了来自$_GET, $_POST或者$_COOKIE的数据, 则Taint就会提示你: $a = $_GET['a']; $file_name = '/tmp' . $a; $output = "Welcome, {$a} !!!"; $var = "output"; $sql = "Select * from " . $a; $sql .= "ooxx"; echo $output; //Warning: main(): Attempt to echo a string which might be tainted in xxx.php on line x print $$var; //Warning: main(): Attempt to print a string which might be tainted in xxx.php on line x include($file_name); //Warning: include() [function.include]: File path contains data that might be tainted in xxx.php on x mysql_query($sql); //Warning: mysql_query() [function.mysql-query]: First argument contains data that might be tainted in xxx.php on line x 目前因为还没有支持5.4(5.4的实现方法, 要依赖于我将要和Dmitry讨论的一个新需求), 所以目前还没有发布一个下载包, 大家可以先直接从源代码下载: [Taint on Github](https://github.com/laruence/php-ext-taint)
联系我们

邮箱 626512443@qq.com
电话 18611320371(微信)
QQ群 235681453

Copyright © 2015-2022

备案号:京ICP备15003423号-3