抱歉,评论被关闭
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