最近一段时间很多使用pbootcms建设的网站都遭遇到了首页挂马的问题,表现形式便是首页页面增加了很多?id=123,?/?id=37087875.csv,?id=26993492.shtml等等形态.当我们查看后台系统日志中的蜘蛛访问或者首页上多了这些链接的时候,基本上就是被挂马了,这个时候我们需要及时作出处理要不然就容易被百度降权甚至严重的时候会被关站(个别链接跳转到了非法网站,如果不及时处理那么也会承受一定的责任的)。备注:本次挂马应该是程序自动挂马,很多使用pbootcms的网站都在短时间范围内受到了攻击。
处理步骤:
1)替换apps以及core文件,如果本地没有备份保存,那么可以选择升级到最近版本,目前官方也根据这个问题进行了更新处理.
2)修改robots.txt文件添加针对首页问题的拒绝访问规则
- # Robots for 371302.cn (临沂建站网)
- Disallow: /admin/*
- Disallow: /skin/
- Disallow: /template/
- Disallow: /static/*
- Disallow: /api/*
- Disallow: /?*
3)修改源码,在apps/home/controller/IndexController.php文件中添加针对首页带参数问题的处理.代码大概在200行以后找到//一级目录这里,在上方添加
if(strstr(URL,"?")){
_404('您访问的路径错误,请核对后重试!');
}
- if(SITE_DIR == ''){
- if(strstr(URL,"?")){
- _404('您访问的路径错误,请核对后重试!');
- }
- //一级目录
- $this->urlJump($url_rule_type,false);
- } else {
- //二级目录
- $this->urlJump($url_rule_type,true);
- }
- //备注:我后面发现个别低版本的好像没有if(SITE_DIR == ''){开头的这里,那么就需要自己主动添加上判断语句才可以
如下:在这里的后方加上else流程,进入主页流程的操作,同时加上urlJump方法(或者升级到最新版本以后再进行修改)
urlJump方法
- //首页跳转并过滤注入字符
- /*
- * @param $type url模式
- * @param $isSecSiteDir 是否为二级目录 boolean
- * */
- private function urlJump($type, $isSecSiteDir){
- $http = is_https() ? 'https://' : 'http://';
- $matches1 = '';
- switch ($type){
- //普通模式
- case 1:
- $preg1 = '';
- if($isSecSiteDir === true){
- if($_SERVER['REQUEST_URI'] == SITE_DIR . '/index.php'){
- $preg1 = '/^\/.*?\/index.php/';
- } elseif($_SERVER['REQUEST_URI'] == '/index.php'){
- $preg1 = '/^\/index.php/';
- }
- } else {
- $preg1 = '/^\/index.php/';
- }
- preg_match($preg1,$_SERVER['REQUEST_URI'],$matches1);
- break;
- //伪静态
- case 2:
- $preg2 = '';
- if($isSecSiteDir === true){
- if($_SERVER['REQUEST_URI'] == SITE_DIR . '/'){
- $preg2 = '/^\/.*/';
- } elseif($_SERVER['REQUEST_URI'] == '/'){
- $preg2 = '/^\/$/';
- }
- } else {
- $preg2 = '/^\/.*/';
- }
- preg_match($preg2,$_SERVER['REQUEST_URI'],$matches1);
- break;
- //兼容模式
- case 3:
- $preg3 = '';
- if($isSecSiteDir === true){
- if(strpos($_SERVER['REQUEST_URI'], SITE_DIR) === 0){
- $preg3 = '/(^\/.*?\/index.php)|(^\/.*)/';
- } elseif(strpos($_SERVER['REQUEST_URI'], '/') === 0){
- $preg3 = '/(^\/index.php)|(^\/)/';
- }
- } else {
- $preg3 = '/(^\/index.php)|(^\/)/';
- }
- preg_match($preg3,$_SERVER['REQUEST_URI'],$matches1);
- break;
- }
- if($matches1[0]){
- if($_SERVER['REQUEST_URI'] == $matches1[0]){
- $this->getIndexPage();
- } else {
- header("Location: " . $http . $_SERVER['HTTP_HOST'] . $matches1[0], true, 301);
- }
- } else {
- _404('您访问的页面不存在,请核对后重试!');
- }
- }
通过以上三步基本上就可以杜绝本次批量被挂马的问题,后续就是要加强服务器上的安全验证的问题了.
=======================分割线
如果配合使用我这边的静态化插件也是一种解决方法,当然使用静态化插件比较适合资讯等数据量比较大的站点使用。
=================分割线2023年2月21日20:24:03
今天心血来潮查看了关于pb被挂马的百度搜索,然后看到一篇文章感觉很熟悉,打开csdn后台以后对比本文发现对方99%的使用了我的文字与图片,惟一不一致的几处就是把我的水印以及网址换成了对方的水印网址(通过截图的方式去掉水印,用的也都是本文中的图片),后面又看到一个网站也是使用了本文,不过对方不仅图片水印都带着也注明了来源于csdn.采集没问题,我自己也是经常采集其他站点的内容,不过一字不差的复制完以后去掉我的信息,然后手动截图去掉水印就不怎么喜欢了,你要是自己在电脑上走一遍然后截图自己电脑画面上传,或者在本文原有的基础上加入你个人的理解方式也就罢了,结果这样.有点理解以前的作者的心情了,也同时在此告诫自己以后自己也要避免这样做.