原创

PHP 如何实现防止SQL注入详解

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 表示本功能打开。

~阅读全文-人机检测~

微信公众号“Java精选”(w_z90110),专注Java技术干货分享!让你从此路人变大神!回复关键词领取资料:如Mysql、Hadoop、Dubbo、Spring Boot等,免费领取视频教程、资料文档和项目源码。微信搜索小程序“Java精选面试题”,内涵3000+道Java面试题!

涵盖:互联网那些事、算法与数据结构、SpringMVC、Spring boot、Spring Cloud、ElasticSearch、Linux、Mysql、Oracle等

评论

分享:

支付宝

微信