文件名称:PHP中的代码安全和SQL Injection防范2
文件大小:2KB
文件格式:TXT
更新时间:2012-03-09 10:42:49
防范2
我们知道Web上提交数据有两种方式,一种是get、一种是post,那么很多常见的sql注射就是从get方式入手的,而且注射的语句里面一定是包含一些sql语句的,因为没有sql语句,那么如何进行,sql语句有四大句: select 、update、delete、insert,那么我们如果在我们提交的数据中进行过滤是不是能够避免这些问题呢? 于是我们使用正则就构建如下函数: 以下为引用的内容: /* 函数名称:inject_check() 函数作用:检测提交的值是不是含有SQL注射的字符,防止注射,保护服务器安全 参 数:$sql_str: 提交的变量 返 回 值:返回检测结果,ture or false 函数作者:heiyeluren */ function inject_check($sql_str) { return eregi('select|insert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile', $sql_str); // 进行过滤 } 我们函数里把 select,insert,update,delete, union, into, load_file, outfile /*, ./ , ../ , ' 等等危险的参数字符串全部过滤掉,那么就能够控制提交的参数了,程序可以这么构建: 以下为引用的内容: 假设我们提交URL为:http://www.target.com/a.php?id=1,那么就会提示: "提交的数据合法,请继续!" 如果我们提交 http://www.target.com/a.php?id=1' select * from tb_name 就会出现提示:"你提交的数据非法,请检查后重新提交!" 那么就达到了我们的要求。 但是,问题还没有解决,假如我们提交的是 http://www.target.com/a.php?id=1asdfasdfasdf 呢,我们这个是符合上面的规则的,但是呢,它是不符合要求的,于是我们为了可能其他的情况,我们再构建一个函数来进行检查: 以下为引用的内容: /* 函数名称:verify_id() 函数作用:校验提交的ID类值是否合法 参 数:$id: 提交的ID值 返 回 值:返回处理后的ID 函数作者:heiyeluren */ function verify_id($id=null) { if (!$id) { exit('没有提交参数!'); } // 是否为空判断 elseif (inject_check($id)) { exit('提交的参数非法!'); } // 注射判断 elseif (!is_numeric($id)) { exit('提交的参数非法!'); } // 数字判断 $id = intval($id); // 整型化 return $id; }