织梦处理外部变量方法

dedecms织梦中 get 和post的变量是不需要我们直接接收的 直接引用就可以了,它有一套处理外部变量的方法

<?php
function _RunMagicQuotes(&$svar)
{//强行转义 函数
	if(!get_magic_quotes_gpc())
	{
		if( is_array($svar) )
		{
			foreach($svar as $_k => $_v) $svar[$_k] = _RunMagicQuotes($_v);
		}
		else
		{
			if( strlen($svar)>0 && preg_match('#^(cfg_|GLOBALS|_GET|_POST|_COOKIE)#',$svar) )
			{
				exit('Request var not allow!');
			}
			$svar = addslashes($svar);
		}
	}
	return $svar;
}




if (!defined('DEDEREQUEST'))//开关
{
	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|_GET|_POST|_COOKIE)#',$val)  )
			{
				exit('Request var not allow!');
			}
		}
	}

	//var_dump($_REQUEST);exit;
	CheckRequest($_REQUEST);//执行包含 $_GET $_POST $_COOKIES

	foreach(Array('_GET','_POST','_COOKIE') as $_request)
	{
		foreach($$_request as $_k => $_v)
		{
			if($_k == 'nvarname') ${$_k} = $_v;//跳过织梦后台自定义的变量
			else ${$_k} = _RunMagicQuotes($_v);//全部到_RunMagicQuotes函数过滤下 转义 并且直接以建值为变量名储存,所有我们在dedecms中所有 get post的变量是不需要我们直接来接的 直接可以使用
		}
	}
}

?>


转载于:https://my.oschina.net/itxti/blog/185101

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值