有什么好的办法避免程序被SQL注入(1)

来源:互联网 发布:专业影视制作软件 编辑:程序博客网 时间:2024/04/27 20:05

function set_magic_quotes_gpc($arr=NULL){        static $isset = 1;    if($isset==2) return ;    if($isset==1){        if (version_compare(PHP_VERSION, '5.3.0','<')) {             if(get_magic_quotes_gpc()==1){                $isset = 2;                return ;             }        }        $isset = 3;    }    $funcName = __FUNCTION__;    if($arr!==NULL){        foreach($arr as &$val){            if(is_array($val)){                $val=$funcName($val);                }else{                $val = addslashes($val);            }                    }        return $arr;                    }    //GET 过滤    foreach($_GET as &$val){        if(is_array($val)){            $val=$funcName($val);            }else{            $val = addslashes($val);        }    }    //POST 过滤    foreach($_POST as &$val){        if(is_array($val)){            $val=$funcName($val);            }else{            $val = addslashes($val);        }    }    //COOKIE 过滤    foreach($_COOKIE as &$val){        if(is_array($val)){            $val=$funcName($val);            }else{            $val = addslashes($val);        }    }        }

这个有个PHP的解决办法 给你 供参考下:

先说明下
magic_quotes_gpc 一直是个头疼的问题 无论 是否开启 都会影响项目的可移植性

所以 php 5.3.0以后 去掉了 这个功能(php 5.3.0以后使用magic_quotes_gpc 和 magic_quotes_runtime 会发出Warning 警告,php6.0以后会测底删除这2个功能。magic_quotes_gpc 中的 gpc 是指 $_GET,$_POST,$_COOKIE 中的 值 这三个值 涉及到 sql注入的问题,magic_quotes_runtime是指php程序从文件或是其他地方获取到的值是否转义 这里不讨论magic_quotes_runtime的问题 ,个人觉得只要程序员稍微留意下 这个问题不存在)

下面这个函数 可以解决这个问题 无论php版本是否大于5.3.0 或是当php版本小于5.3.0时 是否开启magic_quotes_gpc功能 统统不用考虑

这个函数会自动转义 get,post,cookie 中的 单引号(')、双引号(")、反斜线(\)与 NUL(NULL 字符)。

只要在获取 get,post , cookie 前运行下这个函数即可 并且这个函数带有 缓存记忆功能 (一般在头部 功能 程序中 执行下 这个函数就行)。

调用的时 直接 set_magic_quotes_gpc() 不用传递任何参数