原创

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),回复关键字领取资料:如HadoopDubboCAS源码等等,免费领取资料视频和项目。 

涵盖:程序人生、搞笑视频、算法与数据结构、黑客技术与网络安全、前端开发、Java、Python、Redis缓存、Spring源码、各大主流框架、Web开发、大数据技术、Storm、Hadoop、MapReduce、Spark、elasticsearch、单点登录统一认证、分布式框架、集群、安卓开发、iOS开发、C/C++、.NET、Linux、Mysql、Oracle、NoSQL非关系型数据库、运维等。

评论

分享:

支付宝

微信