美文网首页
织梦CMS中的SESSION深思

织梦CMS中的SESSION深思

作者: 码上自动化 | 来源:发表于2018-04-03 16:30 被阅读13次

     最近在基于织梦CMS(dedecms)做公司网站,可以说改动不少,而其中最令我印象深刻的就是织梦的session。

    分别位于 

    include/common.inc.php  #line112

    include/vdimgck.php  #line23

    自己想在前台页面限制一些用户的访问,且后台用户可以访问。必须验证织梦后台用户的登录,于是开始取织梦的session,但是一直没有取出值来,后来才发现原来织梦的session有这样一段代码

    $sessSavePath = DEDEDATA."/sessions/";

    if(is_writeable($sessSavePath) && is_readable($sessSavePath))

    {

    session_save_path($sessSavePath);

    }

    $sessSavePath就是织梦session的存放位置,这里有两点需要注意,一是session_start()必须放在这段代码之后,二是$sessSavePath不能是文件的相对路径或者绝对路径,只能是文件的存放路径如:F:\SESSION。

    于是便顺利的取出了session值。

    回过头来一想又有一个问题,而且是织梦的大问题,改过织梦程序的一定知道,代码如下:

    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;

    }

    if (!defined('DEDEREQUEST'))

    {

    //检查和注册外部提交的变量 QQ好友列表获取

    foreach($_REQUEST as $_k=>$_v)

    {

    if( strlen($_k)>0 && preg_match('/^(cfg_|GLOBALS)/',$_k) )

    {

    exit('Request var not allow!');

    }

    }

    foreach(Array('_GET','_POST','_COOKIE') as $_request)

    {

    foreach($$_request as $_k => $_v) ${$_k} = _RunMagicQuotes($_v);

    }

    }

    一段接收变量的函数,不做详解了。如果不想的话,这段代码写的相当不错,但是如果考虑到安全性,绝对的有漏洞可寻。

    如果我命名这样一个变量 _SESSION["dede_admin_id"]=1 ,如果这个变量被成功接收了,那么dede的任何防御都是那么的不堪一击。稍微看过dede后台登录程序的都知道这个是判断用户登录的session值,问题很严重。微信好友列表获取

    所以错在哪里就在哪里做起,只需过滤掉接收变量的第一个"_"就可以了,那该怎么写呢,用正则呗,代码如下:

    preg_replace("/^_/","",$_k)

    OK搞定。

    做了两个月的织梦,织梦程序做的不错,但是问题也不少。希望织梦能够越来越好了 !新闻发言人

    www.158tui.com   www.1jia.wang

    相关文章

      网友评论

          本文标题:织梦CMS中的SESSION深思

          本文链接:https://www.haomeiwen.com/subject/wakchftx.html