PHP 防注入安全实现程序代码
发布:smiling 来源: PHP粉丝网 添加日期:2014-08-23 09:32:19 浏览: 评论:0
以前讲述的很多关于sql防注入的代码,但是还是得从我们的服务器脚本开始了,下面就来讲述一个下php中防注入的一些常见方法大家可参考.
最常用见的可能就是:
首先将magic_quotes_gpc设置为On,display_errors设置为Off,如果id型,我们利用intval()将其转换成整数类型,如代码:$id=intval($id);
好了下面我来介绍php提交数据过滤的基本原则
1)提交变量进数据库时,我们必须使用addslashes()进行过滤,像我们的注入问题,一个addslashes()也就搞定了,其实在涉及到变量取值时,intval()函数对字符串的过滤也是个不错的选择.
2)在php.ini中开启magic_quotes_gpc和magic_quotes_runtime。magic_quotes_gpc可以把get,post,cookie里的引号变为斜杠,magic_quotes_runtime对于进出数据库的数据可以起到格式话的作用,其实,早在以前注入很疯狂时,这个参数就很流行了.
3)在使用系统函数时,必须使用escapeshellarg(),escapeshellcmd()参数去过滤,这样你也就可以放心的使用系统函数.
4)对于跨站,strip_tags(),htmlspecialchars()两个参数都不错,对于用户提交的的带有html和php的标记都将进行转换,比如尖括号"<"就将转化为 "<"这样无害的字符。
代码如下:
5)对于相关函数的过滤,就像先前的include(),unlink,fopen()等等,只要你把你所要执行操作的变量指定好或者对相关字符过滤严密,我想这样也就无懈可击了.
2、PHP简单的数据过滤
1)入库:trim($str),addslashes($str)
2)出库:stripslashes($str)
3)显示:htmlspecialchars(nl2br($str))
分享一个实例,具体的代码如下:
- <?php
- //security.php
- /**
- * @author zhengwei
- * @copyright 2007
- */
- /*
- 函数名称: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); // 进行过滤
- } //开源代码phpfensi.com
- /*
- 函数名称: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;
- }
- /*
- 函数名称:str_check()
- 函数作用:对提交的字符串进行过滤
- 参 数:$var: 要处理的字符串
- 返 回 值:返回过滤后的字符串
- 函数作者:heiyeluren
- */
- function str_check( $str ) {
- if (!get_magic_quotes_gpc()) { // 判断magic_quotes_gpc是否打开
- $str = addslashes($str); // 进行过滤
- }
- $str = str_replace("_", "_", $str); // 把 '_'过滤掉
- $str = str_replace("%", "%", $str); // 把 '%'过滤掉
- return $str;
- }
- /*
- 函数名称:post_check()
- 函数作用:对提交的编辑内容进行处理
- 参 数:$post: 要提交的内容
- 返 回 值:$post: 返回过滤后的内容
- 函数作者:heiyeluren
- */
- 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); // html标记转换
- return $post;
- }
- foreach ($_POST as $post_key=>$post_var)
- {
- if (is_numeric($post_var)) {
- $post[strtolower($post_key)] = get_int($post_var);
- } else {
- $post[strtolower($post_key)] = get_str($post_var);
- }
- }
- /* 过滤函数 */
- //整型过滤函数
- function get_int($number)
- {
- return intval($number);
- }
- //字符串型过滤函数
- function get_str($string)
- {
- if (!get_magic_quotes_gpc()) {
- return addslashes($string);
- }
- return $string;
- }
- ?>
在有些cms中我会看到如下代码:
- foreach($HTTP_POST_VARS as $key=>$value){
- $ArrPostAndGet[]=$value;
- }
- foreach($HTTP_GET_VARS as $key=>$value){
- $ArrPostAndGet[]=$value;
- }
这个的代码然后在所有页面都加载这个函数,这样过滤个人发现好像上传文件时会有问题.
Tags: PHP防注入 PHP安全代码
相关文章
- ·php安全之防注入详细介绍(2014-08-23)
- ·整理php防注入和XSS攻击通用过滤(2021-06-17)
- ·php中一些安全隐藏代码总结(2014-08-23)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)