cache类代码_php技巧_脚本之家,的解决办法10bet备用网址官网:
分类:多线程

论坛上比很多人都反映说在后台加多新变量的时候会现身 "Request var not allow!" 的BUG错误,本文主要正是介绍如何去解决这一个标题!上面看现实垄断:
在DEDE根目录张开 include/common.inc.php 文件,查找到以下内容:

首先种方法:要是不影响程序的健康推行,可以利用屏蔽的措施

陈述: 目的存在全局变量覆盖漏洞。

借使访谈量大的话会给数据库产生比很大的承负,所以对于转换不平时的内容要办好php 数据cache是十二分要求的,笔者做了叁个简短的php“文件缓存”的类,希望对我们持有助于。 思路是那般的: 对于平日的变量,把该变量形成php语言的格式,写到文件中,用时只要include这些文件就也便是加载了cache了; 对于array型的变量,把array转变为php语言定义array的字符串,写到文件中,用时也假若include就一定于加载了cache了; 缓存cache时间上的支配,通过获取缓存文件的创马上间和当今的时光开展对照,若无到履新时间,直接读取缓存,假诺到了更新时间,查询数据库,重回数据,再立异缓存。 上边是自己的php-kcache类: 注:固然是缓存字符串,请把转义字符多写三个'',即”n”要写成”\n”。 复制代码 代码如下: /* //php-kcache class v_0.1 //Author: kangzj //Email : kangzj@mail.bnu.edu.cn //Blog : //作者不保证本程序还没bug,对于使用本程序 //而引起的任何难题不辜负权利何权利。 */ class php_kcache { //相对或许相对目录,末尾不要加 '/' var $cache_dir = './cache'; var $cache_extension = '.cache.php'; function set_cache{ $pre = "< ?n//Cache Created at: ".date."n"; if{ $value = $value; $str = "$$name = '$value';"; }else{ $str = "$$name = " . $this->arrayeval . ';'; } $end = "n?>"; echo $cache = $pre . $str . $end; $cache_file = $this->cache_dir . '/' . $name . $this->cache_extension; if($fp = @fopen { fwrite; fclose; return true; } else { echo $cache_file; exit('Can not write to cache files, please check cache directory 'State of Qatar; return false; } } //将array造成字符串, 来自discuz! function arrayeval { if { return "'".$array."'"; } $space = ''; for($i = 0; $i < = $level; $i++) { $space .= "t"; } $evaluate = "Arrayn$space(n"; $comma = $space; if { foreach($array as $key => $val) { $key = is_string ? '''.addcslashes.''' : $key; $val = !is_array && (!preg_match("/^-?[1-9]d*$/", $val) || strlen ? '''.addcslashes.''' : $val; if { $evaluate .= "$comma$key => ".arrayeval; } else { $evaluate .= "$comma$key => $val"; } $comma = ",n$space"; } } $evaluate .= "n$space)"; return $evaluate; } } 最简便的调用方法: 复制代码 代码如下: include './php_kcache_class.php'; $pc = new php_kcache; $a = array; $pc->set_cache; 复杂的调用方法——稍后补上….to be continued…

复制代码代码如下:
//检查和登记外界提交的变量
function CheckRequest(&$val) {
if (is_array($val)) {
foreach ($val as $_k=>$_v) {
CheckRequest($_k);
CheckRequest($val[$_k]);
}
} else
{
if( strlen($val)>0 && preg_match('#^(cfg_|GLOBALS)#',$val) )
{
exit('Request var not allow!');
}
}
}

能够在代码的首先行 加上
error_reporting(E_ALL ^ E_NOTICE);

1.受影响版本DEDECMS 5.7、5.6、5.5。
2.尾巴文件/include/common.inc.php
3.DEDECMS的全局变量初步化存在疏漏,能够放肆覆盖放肆全局变量。

将上述内容替换到以下内容:

闭馆掉 NOTICE错误的警戒

危害:
1.黑客能够通过此漏洞来重定义数据库连接。
2.由此此漏洞进行种种超越权限操作布局漏洞直接写入webshell后门。
缓慢解决方案:
暂且应用方案:

复制代码代码如下:
//检查和注册外界提交的变量
function CheckRequest(&$val) {
if (is_array($val)) {
foreach ($val as $_k=>$_v) {
if($_k == 'nvarname') continue;
CheckRequest($_k);
CheckRequest($val[$_k]);
}
} else
{
if( strlen($val)>0 && preg_match('#^(cfg_|GLOBALS)#',$val) )
{
exit('Request var not allow!');
}
}
}

第二种办法:定位到具体的行,依据提醒淹没。
例如elseif ($_POST['istrue'] == 'ok'State of Qatar,如上代码,未有交给istrue这几个,所以自然是有题指标。

在 /include/common.inc.php 中
找到注册变量的代码

校勘完通晓后保存,再去后台试试增加新变量。

能够用如下代码解除
地方先决断
复制代码 代码如下:
if(array_key_exists( 'istrue',$_POST))
{
if($_POST[ 'istrue'])
{
$istrue=$_POST[ 'istrue'];
}
}else{
$istrue='';
}

foreach(Array('_GET','_POST','_COOKIE') as $_request)
{
foreach($$_request as $_k => $_v) ${$_k} = _RunMagicQuotes($_v);
}

背后的论断能够如下
复制代码 代码如下:
elseif ($istrue == 'ok')

修改为

就足以幸免此类错误,我们能够参照他事他说加以考察一些程序的种类是假诺做的。
现实的能够参见dedecms活phpcms的代码
复制代码 代码如下:
//检查和挂号外界提交的变量
foreach($_REQUEST as $_k=>$_v)
{
if( strlen($_k)>0 && eregi('^(cfg_|GLOBALS)',$_k) )
{
exit('Request var not allow!');
}
}
function _RunMagicQuotes(&$svar)
{
if(!get_magic_quotes_gpc())
{
if( is_array($svar) )
{
foreach($svar as $_k => $_v) $svar[$_k] = _RunMagicQuotes($_v);
}
else
{
$svar = addslashes($svar);
}
}
return $svar;
}

foreach(Array('_GET','_POST','_COOKIE') as $_request)
{
foreach($$_request as $_k => $_v) {
if( strlen($_k)>0 && eregi('^(cfg_|GLOBALS)',$_k) ){
exit('Request var not allow!');
}
${$_k} = _RunMagicQuotes($_v);
}
}

foreach(Array('_GET','_POST','_COOKIE') as $_request)
{
foreach($$_request as $_k => $_v) ${$_k} = _RunMagicQuotes($_v);
}
if(empty($istrue))
{
$istrue = '';
}

本文由10bet手机官网发布于多线程,转载请注明出处:cache类代码_php技巧_脚本之家,的解决办法10bet备用网址官网:

上一篇:截取字符串长度 下一篇:没有了
猜你喜欢
热门排行
精彩图文