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

分类:PHP,安全 | 作者:凹凸曼 | 发表于2011/04/06

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

一、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, 安全分类下, 你可以发表评论。除了可以将这个日志以保留源地址及作者的情况下引用到你的网站或博客,还可以通过RSS 2.0订阅这个日志的所有评论。

目前盖楼 (0)层:

发表评论 »

« »