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将移除该选项 |