PHP过滤特殊字符(set_magic_quotes_runtime(0|1) 和 magic_quotes_gpc、addslashes、 stripslashes)

分类:PHP,安全 | 作者:凹凸曼 | 发表于2011/04/06 PHP过滤特殊字符(set_magic_quotes_runtime(0|1) 和 magic_quotes_gpc、addslashes、 stripslashes)已关闭评论

对于字符的过滤,是相当重要的,一般入侵都来源于程序漏洞!

一、magic_quotes_gpc   不能在代码中动态开启或关闭,需要到php.ini将magic_quotes_gpc设置为on或off,
作用范围是:WEB客户服务端;
作用时间:请求开始是,例如当脚本运行时.

二、addslashes 在程序中使用 相当于 magic_quotes_gpc开启的时候

添加数据到数据库之前,我们手动对数据进行addslashes(),而从数据库取出数据时,则作相反操作,即stripslashes()

三、magic_quotes_runtime 

一般来说公共的头部文件,一般 set_magic_quotes_runtime(0) 关闭了。

否则从数据库读取出来的数据单引号、双引号和反斜杠都会被加上\,导致显示不正常

作用范围:从文件中读取的数据或执行exec()的结果或是从SQL查询中得到的;
作用时间:每次当脚本访问运行状态中产生的数据

四、 stripslashes  对于要序列化的内容,要保持裸数据,即要去掉转义,stripslashes(),然后在把序列化过的内容保存到数据库当中(注意,序列化过的内容是不带单引号(’)、双引号(”)、反斜线(\)的),

如下:$aotuman=serialize(stripslashes($test));
             

五、下面摘自DISCUZ的过滤案例

//COOKIE,POST,GET 过滤

foreach(array(‘_COOKIE’, ‘_POST’, ‘_GET’) as $_request) {
 foreach($$_request as $_key => $_value) {
  $_key{0} != ‘_’ && $$_key = daddslashes($_value);
 }
}

//上传文件过滤

if (!MAGIC_QUOTES_GPC && $_FILES) {
 $_FILES = daddslashes($_FILES);
}

//过滤函数

function daddslashes($string, $force = 0) {
 !defined(‘MAGIC_QUOTES_GPC’) && define(‘MAGIC_QUOTES_GPC’, get_magic_quotes_gpc());
 if(!MAGIC_QUOTES_GPC || $force) {
  if(is_array($string)) {
   foreach($string as $key => $val) {
    $string[$key] = daddslashes($val, $force);
   }
  } else {
   $string = addslashes($string);
  }
 }
 return $string;
}

本文出自 “凹凸曼” 博客,请务必保留此出处 http://www.apoyl.com/?p=441

日志信息 »

该日志于2011-04-06 02:16由 凹凸曼 发表在PHP, 安全分类下, 评论已关闭。

目前盖楼

抱歉,评论被关闭

« »