LayerLocalCDN更新:修正恶意访问导致无效目录增多的问题

导语:在使用自己的LayerLocalCDN时,发现了一个问题,就是没有指定缓存目录,导致缓存服务器在别人恶意访问的时候创建了许多奇奇怪怪的目录。今天终于有时间来修正了这个BUG。

问题描述

我们在访问某个静态资源的时候,缓存服务器就会根据URL来生成一级一级的目录,例如:
wp-content/themes/WordPressThemeWordPressLeaf_cn-master/style.css?ver=12.1。

这个URL会在缓存服务器上生成,wp-content、themes、WordPressThemeWordPressLeaf_cn-master,这三级目录,然后在WordPressThemeWordPressLeaf_cn-master目录下面创建style.css。

现在问题来了,由于没有限制,所以在被人恶意访问时会随意地生成目录。即使他访问的那个文件是根本不存在的。这样导致的后果就会让缓存服务器的存储目录超多,虽然这样的恶意访问带来不了什么伤害。

如何修正

其实修正也很简单,就是只有指定的目录名,缓存服务器才能创建就可以了。对LayerLocalCDN,只需要修改两个地方,一是配置文件,二是控制文件。下面来看看具体的代码:

config.sample.inc.php

增加下面代码:

define('CDN_DIR','wp-content|wp-includes');	//指定缓存的目录,注意只有这里的缓存目录是指根目录下的一级目录。

controller.php

增加下面代码:

/******目录检测开始 ********/
//判断请求的URL是不是规定的目录
//将状态设为0
$cdn_dirs_staus=0;
//查找是否存在'/',有则意味这有目录,进入缓存目录判断,如果没有,则意味着是根目录下的,可以直接缓存。
 if ( stripos($request,'/') ) {
    if (CDN_DIR){ //判断是否有预设的缓存目录
    //先将可以缓存的目录解析为数组
    $cdn_dirs=explode('|',strtolower(CDN_DIR));
    //查找请求的URL是否在预设的缓存目录里面
    foreach ($cdn_dirs as &$dirvalue) {
       if (stripos($request,$dirvalue.'/') === 0){
       $cdn_dirs_staus=1; //找到就将状态赋值为1,并且跳出本次循环。
       break;
       }
     }
    unset($dirvalue);//销毁目录的值
   }else{
   //判断是否有预设的缓存目录,如果没有直接状态改为1;
   $cdn_dirs_staus = 1;
   }
 }else{ //判断是否有斜杠,没有斜杠意味着是一个根目录的文件。
 $cdn_dirs_staus = 1;
 }
 //如果状态为0,那么意味着不符合缓存目录的条件,缓存终止。
 if ($cdn_dirs_staus === 0){ 
 exit(0); 
 }else{
 return 0;
 }
 /******目录检测结束 ********/

结束

其实,如果你不是开发者,就不用仔细看了,自己去下载最新版本吧。点击这里下载最新版本。如果你觉得好用的话,来本站支持一下我们吧。

目前在“LayerLocalCDN更新:修正恶意访问导致无效目录增多的问题”上有4条评论

  1. 无视我 我直接把
    if ($cdn_dirs_staus === 0){
    exit(0);
    }else{
    return 0;
    }

    删掉好像就可以了

    1. 文章都是定时的,才看到。我已经修复了这个问题,你在gighub上下载的就是最新的版本。你为啥要删除代码?我自己使用得挺好的,你遇到了什么问题?

发表评论

邮箱地址不会被公开。 必填项已用*标注