SQL注入是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句,下面为大家讲述一下PHP如何实现防止SQL注入。
1、检测提交数据是不是含有SQL注射的字符防止注射,保护服务器安全,具体代码如下:
function inject_check($sql_str) { return eregi('select|insert|and|or|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile', $sql_str); // 进行过滤 }
eregi函数字符串比对解析,与大小写无关;本函数和 ereg() 类似,用法也相同。不同之处在于 ereg() 有区分大小写,本函数与大小写无关。
2、校验提交的ID类值是否合法,具体代码如下:
function verify_id($id=null) { if (!$id) { exit('没有提交参数!'); } elseif (inject_check($id)) { exit('提交参数非法!'); } elseif (!is_numeric($id)) { exit('提交参数非法!'); } $id = intval($id); return $id; }
3、对提交的字符串进行过滤,具体代码如下:
function str_check( $str ) { if (!get_magic_quotes_gpc()) { $str = addslashes($str); } $str = str_replace("_", "\_", $str); //过滤掉 '_' $str = str_replace("%", "\%", $str); // 过滤掉'%' return $str; }
4、对提交的内容进行处理,具体代码如下:
function post_check($post) { if (!get_magic_quotes_gpc()) { // 判断magic_quotes_gpc是否为打开 $post = addslashes($post); // 进行magic_quotes_gpc没有打开的情况对提交数据的过滤 } $post = str_replace("_", "\_", $post); //过滤掉 '_' $post = str_replace("%", "\%", $post); // 过滤掉'%' $post = nl2br($post); $post = htmlspecialchars($post); return $post; }
get_magic_quotes_gpc取得 PHP环境变量magic_quotes_gpc 的值。语法: long get_magic_quotes_gpc(void);
返回值: 长整数函数种类: PHP 系统功能内容说明本函数取得 PHP 环境配置的变量magic_quotes_gpc (GPC, Get/Post/Cookie) 值;
返回 0 表示关闭本功能;返回 1 表示本功能打开。