DedeCMS后台安全提示功能分析教程

admin2020-02-011082

edeCMS安全提示指的是例如后台后,我们看到的如下图所示内容。

151034oqn9oz9qaw9a928m.png

这个功能是如何实现的?程序又是如何知道我们安装完系统后,有没有改用户名和密码,有没有改管理目录的,本教程就是对这个功能进行分析。

这个功能用到的了ajax知识,但是,也不是多么复杂,打开织梦后台模板文件dede/templets/index_body.htm, 找到如下代码:<div id="__testEvn"></div> 。上图中的内容就显示在这个div里面,但是,这个div里面既没有相应的php变量,也没有其它html代码,但是,从后台的结果查询发现确实在这个div里面显示上图中的内容,这就说明,当我们登录后台后看到的内容不是通过php变量或html显示在这个div里面的,而是,通过ajax来实现的。

如果你把这个分析出来了,再有点jquery的知道的话,就很容易知道,织梦肯定引入了jquery,我们在这个模板文件里面头部找到如下函数:

<script type="text/javascript">
$(function()
{
   $.get("index_testenv.php",function(data)
  {
    if(data !== '')
    {
        $("#__testEvn").html(data);
    }
  });

});
</script>

这段代码在</head>标签上面,这已经简化了,光有这个还不行,还要引入上面多个js文件,那上面多个js文件是织梦官方压缩后的,一般情况到jquery官方下载一个jquery框架,直接引入这一个就可以了,但是,这样的jquery是没有压缩或精简的。

明白了了这些,我们再看一下这个jquery函数,其实主要是$.get(参数)函数,第一个参数表示要请求的url,这里对这个函数简写了,第二个参数就是后面的一大段:

function(data)
  {
    if(data !== '')
    {
        $("#__testEvn").html(data);
    }

第一个参数是请求数据,第二个参数也就是上面的这个函数是处理这个请求后的数据,如果返回的数据值不为空,则把这些数据放入到css的id__testEvn 所在div里面。明白了这一点我们就可以推测出,我们请求的数据是在index_testnv.php文件里面,打开这个文件,找到最后。

代码如下图所示。

151125u9m4z9fq24mf4f1g.jpg

我们只是推测出是这段到底是不是?我们可以测试一下,例如:我把$safeMsg[] = '默认管理目录为dede,需要立即将它更名;';这一行代码里面的内容改一下,改成:$safeMsg[] = '织梦基地www.xxx.com,默认管理目录为dede,需要立即将它更名;';

也就是加上:织梦基地www.xxx.com ,这些内容,再看一下后台显示的效果如下所示。

是不是已经变了,如果还不放心我们再用jquery进行测试一下,我们在模板index_body.htm里面的上面的函数里面加上alert(data)这一句代码,即下图所示。

151153go6xrwk1gxo1mbml.jpg

刷新一下后台,得到如下图所示结果。

151153go6xrwk1gxo1mbml.jpg

也是正确的,这样既测试了具体内容,也测试了上面我们分析的jqery的代码。

其实,检测权限分为二部分来实现的,一是把要显示的内容组装到数组$safeMsg 里面,然后,再遍历一下这个数组,并echo 出具体内容来,这是jquery获取数据必须的一点,如果不echo 是调不出内容来的,也就是说jquery里面的那个函数$.get(参数)是请求的具体的html代码。

下面的代码:

          <?php
  $i=1;
  foreach($safeMsg as $key => $val)
  {
  ?>
          <tr>
            <td><font color="black"><?php echo $i;?>.</font><?php echo $val;?></td>
          </tr>
          <?php
      $i++;
  }
  ?>


网友评论