php防sql注入类,可以过滤敏感参数

本文章总结了几乎所有可能出来的php防sql注入类代码,各位同学不防进入参考。

确定xp_cmdshell可执行情况

发现web虚拟目录

上传asp,php,jsp木马;

得到管理员权限;

//php整站防注入程序,需要在公共文件中require_once本文件
//判断magic_quotes_gpc状态
if (@get_magic_quotes_gpc ()) {
$_get = sec ( $_get );
$_post = sec ( $_post );
$_cookie = sec ( $_cookie );
$_files = sec ( $_files );
}
$_server = sec ( $_server );
function sec(&$array) {
//如果是数组,遍历数组,递归调用
if (is_array ( $array )) {
foreach ( $array as $k => $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 ) < $min) { die ( '最少$min字节' ); } else if (isset ( $max ) && strlen ( $str ) > $max) {
die ( ‘最多$max字节’ );
}
return stripslashes_array ( $str );
}

输入的参数yy为字符串时,通常abc.php中sql语句原貌大致如下:

select * from 表名 where 字段=’yy’,所以可以用以下步骤测试sql注入是否存在。

①http://xxx.xxx.xxx/abc.php?p=yy’(附加一个单引号),此时abc.asp中的sql语句变成了

select * from 表名 where 字段=yy’,abc.asp运行异常;

②http://xxx.xxx.xxx/abc.php?p=yy&;nb … 39;1’=’1′, abc.php运行正常,而且与http://xxx.xxx.xxx/abc.asp?p=yy运行结果相同;

③http://xxx.xxx.xxx/abc.php?p=yy&;nb … 39;1’=’2′, abc.php运行异常;

如果以上三步全面满足,abc.asp中一定存在sql注入漏洞。

//防注入函数
function inject_check($sql_str) {
return eregi ( ‘select|inert|update|delete|’|/*|*|../|./|union|into|load_file|outfile’, $sql_str );
// 进行过滤,防注入
}
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;
}

//php 批量过滤post,get敏感数据
if (get_magic_quotes_gpc()) {
$_get = stripslashes_array($_get);
$_post = stripslashes_array($_post);
}

function stripslashes_array(&$array) {
while(list($key,$var) = each($array)) {
if ($key != ‘argc’ && $key != ‘argv’ && (strtoupper($key) != $key || ”.intval($key) == “$key”)) {
if (is_string($var)) {
$array[$key] = stripslashes($var);
}
if (is_array($var)) {
$array[$key] = stripslashes_array($var);
}
}
}
return $array;
}
//过滤
function htmlencode($str){
if(empty($str)) return;
if($str==””) return $str;
$str=trim($str);
$str=str_replace(“&”,”&”,$str);
$str=str_replace(“>”,”>”,$str);
$str=str_replace(“”,”>”,$str);
$str=str_replace(“”,”>”,$str);
$str=str_replace(“

Posted in 未分类

发表评论