您好,欢迎访问一九零五行业门户网

一个全面的PHP整站防注入程序_PHP教程

这是一个考虑比较全面的php和sql结合的防注入程序,在php方便主要对get,post,cooke,files进行了过滤,在sql中我们就对delete,update一些查询命令进行检测过滤。
sql注入攻击的总体思路
·发现sql注入位置;
·判断后台数据库类型;
·确定xp_cmdshell可执行情况
·发现web虚拟目录
·上传asp,php,jsp木马;
·得到管理员权限;
$v ) {
$array [$k] = sec ( $v );
}
} else if (is_string ( $array )) {
//使用addslashes函数来处理
$array = addslashes ( $array );
} else if (is_numeric ( $array )) {
$array = intval ( $array );
}
return $array;
}
1、整型参数的判断
当输入的参数yy为整型时,通常abc.asp中sql语句原貌大致如下:
select * from 表名 where 字段=yy,所以可以用以下步骤测试sql注入是否存在。
①http://xxx.xxx.xxx/abc.asp?p=yy’(附加一个单引号),此时abc.asp中的sql语句变成了
select * from 表名 where 字段=yy’,abc.asp运行异常;
②http://xxx.xxx.xxx/abc.asp?p=yy and 1=1, abc.asp运行正常,而且与http://xxx.xxx.xxx/abc.asp?p=yy运行结果相同;
③http://xxx.xxx.xxx/abc.asp?p=yy and 1=2, abc.asp运行异常;
如果以上三步全面满足,abc.asp中一定存在sql注入漏洞。
综合上面我们写一个整型过滤函数
 代码如下 复制代码
function num_check($id) {
if (! $id) {
die ( '参数不能为空!' );
} //是否为空的判断
else if (inject_check ( $id )) {
die ( '非法参数' );
} //注入判断
else if (! is_numetic ( $id )) {
die ( '非法参数' );
}
//数字判断
$id = intval ( $id );
//整型化
return $id;
}
//字符过滤函数
function str_check($str) {
if (inject_check ( $str )) {
die ( '非法参数' );
}
//注入判断
$str = htmlspecialchars ( $str );
//转换html
return $str;
}
function search_check($str) {
$str = str_replace ( _, _, $str );
//把_过滤掉
$str = str_replace ( %, %, $str );
//把%过滤掉
$str = htmlspecialchars ( $str );
//转换html
return $str;
}
//表单过滤函数
function post_check($str, $min, $max) {
if (isset ( $min ) && strlen ( $str ) die ( '最少$min字节' );
} else if (isset ( $max ) && strlen ( $str ) > $max) {
die ( '最多$max字节' );
}
return stripslashes_array ( $str );
}
当输入的参数yy为字符串时,通常abc.asp中sql语句原貌大致如下:
select * from 表名 where 字段='yy',所以可以用以下步骤测试sql注入是否存在。
①http://xxx.xxx.xxx/abc.asp?p=yy’(附加一个单引号),此时abc.asp中的sql语句变成了
select * from 表名 where 字段=yy’,abc.asp运行异常;
②http://xxx.xxx.xxx/abc.asp?p=yy&;nb ... 39;1'='1', abc.asp运行正常,而且与http://xxx.xxx.xxx/abc.asp?p=yy运行结果相同;
③http://xxx.xxx.xxx/abc.asp?p=yy&;nb ... 39;1'='2', abc.asp运行异常;
如果以上三步全面满足,abc.asp中一定存在sql注入漏洞。
代码如下 复制代码
//防注入函数
function inject_check($sql_str) {
return eregi ( 'select|inert|update|delete|'|/*|*|../|./|union|into|load_file|outfile', $sql_str );
// www.hzhuti.com 进行过滤,防注入
}
function stripslashes_array(&$array) {
if (is_array ( $array )) {
foreach ( $array as $k => $v ) {
$array [$k] = stripslashes_array ( $v );
}
} else if (is_string ( $array )) {
$array = stripslashes ( $array );
}
return $array;
}
?>
好了文章介绍到的防注入也算是比较全面的,大家可以测试或更出更好的方法.
http://www.bkjia.com/phpjc/629668.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/629668.htmltecharticle这是一个考虑比较全面的php和sql结合的防注入程序,在php方便主要对get,post,cooke,files进行了过滤,在sql中我们就对delete,update一些查询命令进行...
其它类似信息

推荐信息