导语:在使用自己的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; } /******目录检测结束 ********/
结束
其实,如果你不是开发者,就不用仔细看了,自己去下载最新版本吧。点击这里下载最新版本。如果你觉得好用的话,来本站支持一下我们吧。
弱弱问一句不要怎么设置
这文章修复过程。你直接用新版本就可以了。
无视我 我直接把
if ($cdn_dirs_staus === 0){
exit(0);
}else{
return 0;
}
删掉好像就可以了
文章都是定时的,才看到。我已经修复了这个问题,你在gighub上下载的就是最新的版本。你为啥要删除代码?我自己使用得挺好的,你遇到了什么问题?