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

   自己想在前台页面限制一些用户的访问,且后台用户可以访问。必须验证织梦后台用户的登录,于是开始取织梦的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'))
{
//检查和注册外部提交的变量
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搞定。





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

DEDE把变量放进session中,结果取值为null的问题的更多相关文章

  1. MyBatis SQL配置文件中使用#{}取值为null时却不报错的解决方案。

    原因是因为#{kh_id} 这个参数名为小写,我之前写成了大写{#KH_ID}所以取不到值

  2. 在查询时将查询条件放入Session中,导出时直接根据qpniRGaFiler取查询条件即可

    在查询时将查询条件放入Session中,导出时直接根据qpniRGaFiler取查询条件即可

  3. 如果将彩色图像和灰度图像一起放进 CNN 中去,会是什么结果?

    如果将彩色图像和灰度图像一起放进 CNN 中去,会是什么结果? 今天,坑爹的实验,我处理 SUN397 的时候,忘记去掉灰度图了,结果,利用微调后的 model 提取 feature,悲剧的发现,无论 ...

  4. 302重定向之后,session中存储的值没了

    302重定向之后,session中存储的值没了

  5. Loadrunner中参数化取值方式分析

    Loadrunner中参数化取值依赖两个维度: 1.取值顺序分为“顺序”“随机”“唯一”.    select next row:Sequential , Random,unique 2.更新值时分为 ...

  6. linux下安装Sublime Text3并将它的快捷方式放进启动器中

    Sublime Text是一个代码编辑器,我主要是用它来编辑python.下面就来简单说明下它在linux的安装过程吧! 1.添加sublime text3的仓库 首先按下快捷键ctrl+alt+t打 ...

  7. 【现学现卖】th:href标签动态路径设置,thymeleaf获取session中的属性值

    update:2020-02-28:按道理来说这个功能在前后端分离的时候应该不怎么用的上,基本到现在我还是没遇到过有这样的需求,不过也是一种方法就是.th:href="@{/{role}/l ...

  8. JS或jsp获取Session中保存的值

    JS是不能读取Session中的值的 . session是服务器对象, javascript是客户端脚本,你能做的操作就是把这个值用 <%=%>输出到页面的javascript中参与运算, ...

  9. C语言中数据类型取值范围的计算的理解与总结

    c语言中,数据类型有short,int,long,char,float,double,然后除了浮点型只有 有符号数(signed)外,其他的数据类型都分为有符号(signed)和无符号(unsigne ...

随机推荐

  1. 国内物联网平台(5):机智云IoT物联网云服务平台及智能硬件自助开发平台

    国内物联网平台(5)——机智云IoT物联网云服务平台及智能硬件自助开发平台 马智 平台定位 机智云平台是致力于物联网.智能硬件云服务的开放平台.平台提供了从定义产品.设备端开发调试.应用开发.产测.运 ...

  2. build linaro 4.8 on ubuntu 12.04 64bit

    安装必要的软件 sudo apt-get build-dep gcc binutils gdb sudo apt-get install curl gawk sudo apt-get install ...

  3. 多用户ATM机(面向对象编程)

    let readline = require('readline-sync'); // 清屏函数 let clear = () => process.stdout.write(process.p ...

  4. DotNet经典面试题(转载)

    .Net基础常见 什么叫应用程序域?什么是受管制的代码?什么是强类型系统?什么是装箱和拆箱?什么是重载?CTS.CLS.CLR分别作何解释? 答: 1应用程序域可以理解为一种轻量级进程.起到安全的作用 ...

  5. Repeater控件的分隔线

    在Repeater控件中,很容易实现在行与行之间使用分隔线.因为此控件有内置的SeparatorTemplate模版.举个例子吧: 运行时,可以看到效果: 说句实在的话,Insus.NET做一条水平线 ...

  6. C++日志模块实现的经验之谈

    以类的方式对日志模块进行封装,可创建一个单实例的接口或创建一个全局的日志对象指针,同时提供相应的对外写日志接口. 写日志的接口采用可变参数来建立,可使用va_list类型和##args参数,同时在写日 ...

  7. oracle如何去除字符串中的重复字符

    create or replace function remove_rame_string(oldStr varchar2, sign varchar2) return varchar2 is /** ...

  8. Mouse Hunt

    Mouse Hunt 给定一个n个点的图,每个点有权值\(c_i\),并且只有一条出边.现在你要在一些点上打标记,使得从任何一个点出发最终都会经过有标记的点.求标记点的权值和最小值. 就是找环啊!拓扑 ...

  9. P4015 运输问题

    \(\color{#0066ff}{题目描述}\) W 公司有 m 个仓库和 n 个零售商店.第 i 个仓库有 \(a_i\) 个单位的货物:第 j 个零售商店需要 \(b_j\) 个单位的货物. 货 ...

  10. Nexus 相关

    https://help.sonatype.com/repomanager3/download https://www.jianshu.com/p/5fc8fb14d25c