它的代码里有这样一段:
foreach(array('_COOKIE', '_POST', '_GET') as $_request) {
foreach($$_request as $_key => $_value) { $_key{0} != '_' && $$_key = daddslashes($_value);//daddslashes递归转义关键字符,类似addslashes
}
}
这样的话就是按GPC的优先次序,模拟了register_globals = On。
比如$_COOKIE['test']=value1 会在处理页面转成$test=value1,并且会被$_GET['test']=value2覆盖。
很难理解它为何要这样做。太不安全了。只要一不小心,就会有可能利用url后缀 ?test=xxx之类来改变设定值啊!
foreach(array('_COOKIE', '_POST', '_GET') as $_request) {
foreach($$_request as $_key => $_value) { $_key{0} != '_' && $$_key = daddslashes($_value);//daddslashes递归转义关键字符,类似addslashes
}
}
这样的话就是按GPC的优先次序,模拟了register_globals = On。
比如$_COOKIE['test']=value1 会在处理页面转成$test=value1,并且会被$_GET['test']=value2覆盖。
很难理解它为何要这样做。太不安全了。只要一不小心,就会有可能利用url后缀 ?test=xxx之类来改变设定值啊!
foreach($$_request as $_key => $_value) {
$_key{0} != '_' && $$_key = daddslashes($_value);
}
}
//$_key{0} != '_' //DZ里,一般带_前缀的都是系统比较重要的,不会这样处理。
cookie的值也是dcookie来获得的。
个人觉得应该加个isset($$_key),更改下优先次序
如果从URL构建恶意攻击参数,会被同名的、真正从页面发送过来的P和C所覆盖。
这是最新版7.2的写法。
关键是他为何还要模拟个register_globals = On
php老早就因为这样不安全建议抛弃$_REQUEST[]之类的用法,并且register_globals默认都是off的。。
感觉它的写法好奇怪
另外它还有个dhtmlspecialchars方法,类似于htmlspecialchars,编码特殊字符防xss,//将&"<>过滤,同时放过&#+(3到5位数字)或&#x+(4位16进制的数字)格式的编码如d
//【暂时不清楚为何要如此?完全可以利用这个对html编码放行的设定而进行xss攻击】
function dhtmlspecialchars($string) {
if(is_array($string)) {
foreach($string as $key => $val) {
$string[$key] = dhtmlspecialchars($val);
}
} else {
$string = preg_replace('/&((#(\d{3,5}|x[a-fA-F0-9]{4}));)/', '&\\1',
//$string = preg_replace('/&((#(\d{3,5}|x[a-fA-F0-9]{4})|[a-zA-Z][a-z0-9]{2,5});)/', '&\\1',
str_replace(array('&', '"', '<', '>'), array('&', '"', '<', '>'), $string));
}
return $string;
}