PHP整站防注入程序
发布:smiling 来源: PHP粉丝网 添加日期:2014-08-23 13:25:33 浏览: 评论:0
这是一个考虑比较全面的php和sql结合的防注入程序,在php方便主要对get,post,cooke,files进行了过滤,在sql中我们就对delete,update一些查询命令进行检测过滤.
SQL注入攻击的总体思路
·发现SQL注入位置;·判断后台数据库类型;·确定XP_CMDSHELL可执行情况·发现WEB虚拟目录·上传ASP,php,jsp木马;·得到管理员权限;
PHP整站防注入程序实例代码如下:
- <?PHP
- //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 );
- } //开源代码phpfensi.com
- } 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.phpfensi.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;
- }
好了文章介绍到的防注入也算是比较全面的,大家可以测试或更出更好的方法.
Tags: PHP整站防注入 PHP防注入
相关文章
- ·PHP防注入内容过滤方法(2014-08-21)
- ·PHP防注入之程序里的敏感信息(2014-08-22)
- ·php sql注入与防注入经典案例分析(2014-08-23)
- ·经典php防注入函数代码(2014-08-25)
- ·php通用防注入与注入详细说明(2014-08-25)
- ·php防注入代码方法,过滤所有GET POST(2014-08-25)
- ·php简单实现sql防注入的方法(2021-07-29)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)