PHP代码审计中的SQL注入
危险编码行为
| 编码 |
详情 |
| $_GET |
预定义的 $_GET 变量用于收集来自 method=“get” 的表单中的值。从带有 GET 方法的表单发送的信息,对任何人都是可见的(会显示在浏览器的地址栏),并且对发送信息的量也有限制。 |
| $_POST |
预定义的 $_POST 变量用于收集来自 method=“post” 的表单中的值。从带有 POST 方法的表单发送的信息,对任何人都是不可见的(不会显示在浏览器的地址栏),并且对发送信息的量也没有限制。注释:然而,默认情况下,POST 方法的发送信息的量最大值为 8 MB(可通过设置 php.ini 文件中的 post_max_size 进行更改)。 |
| $_COOKIE |
存放通过HTTPcookie传递给当前脚本的变量。 |
| $_REQUEST |
用于收集HTML表单提交的数据。 |
| $_SERVER |
是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目;服务器可能会忽略一些,或者提供一些没有在这里列举出来的项目。 |
| $_GET_VARS |
与上含义相同,PHP4.1.0中已弃用 |
| $_POST_VARS |
与上含义相同,PHP4.1.0中已弃用 |
| $_COOKIE_VARS |
与上含义相同,PHP4.1.0中已弃用 |
| $_REQUEST_VARS |
与上含义相同,PHP4.1.0中已弃用 |
| $_SERVER_VARS |
与上含义相同,PHP4.1.0中已弃用 |
危险函数
| 函数 |
详情 |
| mysql_ query($sql) |
向当前使用的数据库发送一一个查询 |
| mssql_ query($sql) |
向当前使用的数据库发送一一个查询 |
| mysql_ query($db,$sql) |
选择一个数据库,在该数据库上执行一个查询 |
| oci_parse($connection,$sql) |
在语句执行前对其进行解析 |
| ora_parse($curosr,$sql) |
在语句执行前对其进行解析 |
| mssql_bind(&stnt,’@params’,$variable,SQLVARCHAR,false,false,100) |
向存储过程添加一个参数 |
| odbc_prepare($db,$sql) |
准备执行一条语句 |
| odbc_exec($db,$sql) |
准备并执行一条SQL语句 |
| pg_query($conn,$sql) |
执行一个查询,曾为pg_exec() |
| pg_exec($conn,$sql) |
执行一个查询 |
| pg_send_query($conn,$sql) |
发送一个异步查询 |
| pg_send_query_prams($conn,$sql,$params) |
向服务器提交一个命令并分离参数,无需等待结果 |
| pg_query_prams($conn,$sql,$params) |
向服务器提交一个命令并等待结果 |
| pg_send_prepare($conn,“my_query”,‘SELECT * FROM table WHERE field=1’) |
发送一个请求以创建一条具有指定参数的预备语句,无需等待完成 |
| pg_prepare($conn,“my_query”,‘SELECT * FROM table WHERE field=1’) |
发送一个请求以创建一条具有指定参数的预备语句并等待完成 |
| pg_select($conn,$table_name,$assoc_array) |
根据指定的具有field=>value的assoc_array选择记录 |
| pg_update($conn,$arr_update,$arr_where) |
用数据更新与制定条件匹配的记录 |
| pg_insert($conn,$table_name,$assoc_array) |
将assoc_array的值插入到table_name指定的表中 |
| pg_delete($conn,$table_name,$assoc_array) |
根据assoc_array中制定的键和值删除表中的记录 |
跟踪数据
推荐使用UNIX中国的GREP工具与AWK工具
审计流程中,可查看php.ini中的相关开关,如下表:
| 名称 |
作用 |
| register_globals |
负责将EGPCS变量注册成全局变量, PHP 4.2.0默认禁用了该功能 |
| magic_quotes |
用来避开传递给应用的存在潜在危害的字符,包括单引号、双引号、反斜线和NULL字符,PHP5.3.0弃用了magic_ quotes 选项,而PHP 6.0.0将移除该选项 |