php整站防注入程序,一个全面的PHP整站防注入程序

SQL注入攻击的总体思路

·发现SQL注入位置;

·判断后台数据库类型;

·确定XP_CMDSHELL可执行情况

·发现WEB虚拟目录

·上传ASP,php,jsp木马;

·得到管理员权限;

代码如下

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.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.111com.net 进行过滤,防注入

}

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;

}

?>

好了文章介绍到的防注入也算是比较全面的,大家可以测试或更出更好的方法.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值