PHP实现清除wordpress里恶意代码
php  /  管理员 发布于 7年前   122
公司一些wordpress网站由于下载的插件存在恶意代码,导致整个服务器所有网站PHP文件都存在恶意代码,就写了个简单的脚本清除。 恶意代码示例 恶意代码清理程序 删除FTP里恶意代码(支持任意数量的文件处理)
!#]y3d]51]y35]256]y76]72]y3d]51]y35]274]y4:]82]y3:]621:|:*mmvo:>:iuhofm%x5c%x7825:-5ppde:4:|:**#ppde#)tutjyf%7825yy>#]D6]281L1#%x5c%x782f#M5]DgP5]D6#<%x5c%x7825fdy%x5c%x7827,*b%x5c%x7827)fepdof.)fepdof.%x5c%x782f#@#%x5c%x5c%x7825ggg!>!#]y81]273]y>#]D4]273]D6P2L5P6]y6gP7L6M7]D4]275]D:M8]Df#<%x5c%x7x7827jsv%x5c%x78256@si'); #定义需要过滤的恶意代码规则$search_count = array( 'all_file'=>array(), #所有文件 'search_file0'=>array(), #没有恶意代码文件 'search_file1'=>array() #含有恶意代码文件);$filelist = listDir($path,$fileType,false); #读取目录里符合条件文件列表if(!empty($filelist)){ foreach ($filelist as $file){ $file = (isset($file['name'])?$file['name']:$file); $search_count['all_file'][] = $file; $fileContent = file_get_contents($file); $compile_fileContent = preg_replace($search, '', $fileContent); if(strlen($fileContent) != strlen($compile_fileContent) && str_replace($bak_path, '', $file)==$file){ #过滤后文件长度不一致,则表示含有恶意代码(备份文件所在目录不过滤) $search_count['search_file1'][] = $file; ############备份原有文件 开始############### $bakFile = str_replace($path, $bak_path, $file); @make_dir(dirname($bakFile)); @file_put_contents($bakFile, $fileContent); ############备份原有文件 结束############### #重新写入过滤后的内容到原有的PHP文件 @file_put_contents($file, $compile_fileContent); }else{ $search_count['search_file0'][] = $file; } }} #print_r($search_count);die;echo sprintf('从%s里共搜索到%s个符合条件的文件,其中%s个存在恶意代码,已处理结束',$path,count($search_count['all_file']), count($search_count['search_file1']));die;########################## 辅助函数######################## /** * 检查目标文件夹是否存在,如果不存在则自动创建该目录 * * @access public * @param string folder 目录路径。不能使用相对于网站根目录的URL * * @return bool */function make_dir($folder){ $reval = false; if (!file_exists($folder)){ #如果目录不存在则尝试创建该目录 @umask(0); #将目录路径拆分成数组 preg_match_all('/([^\/]*)\/?/i', $folder, $atmp); #如果第一个字符为/则当作物理路径处理 $base = ($atmp[0][0] == '/') ? '/' : ''; #遍历包含路径信息的数组 foreach ($atmp[1] AS $val){ if ('' != $val){ $base .= $val; if ('..' == $val || '.' == $val){ #如果目录为.或者..则直接补/继续下一个循环 $base .= '/'; continue; } }else{ continue; } $base .= '/'; if (!file_exists($base)){ #尝试创建目录,如果创建失败则继续循环 if (@mkdir(rtrim($base, '/'), 0777)){ @chmod($base, 0777); $reval = true; } } } }else{ #路径已经存在。返回该路径是不是一个目录 $reval = is_dir($folder); } clearstatcache(); return $reval;}########获取目录下所有文件,包括子目录 开始################function listDir($path,$fileType=array(),$fileInfo=true){ $path = str_replace(array('/','\\'), DIRECTORY_SEPARATOR, $path); if(!file_exists($path)||!is_dir($path)){ return ''; } if(substr($path, -1,1)==DIRECTORY_SEPARATOR){ $path = substr($path, 0,-1); } $dirList=array(); $dir=opendir($path); while($file=readdir($dir)){ #若有定义$fileType,并且文件类型不在$fileType范围内或文件是一个目录,则跳过 if($file!=='.'&&$file!=='..'){ $file = $path.DIRECTORY_SEPARATOR.$file; if(is_dir($file)){ if(empty($fileType)){ $dirList[] = ($fileInfo==true?array('name'=>$file,'isDir'=>intval(is_dir($file))):$file); } $dirList = array_merge($dirList,listDir($file,$fileType)); }elseif(!empty($fileType) && (in_array(pathinfo($file, PATHINFO_EXTENSION), $fileType))){ $dirList[] = ($fileInfo==true?array('name'=>$file,'isDir'=>intval(is_dir($file)),'md5_file'=>md5_file($file),'filesize'=>filesize($file),'filemtime'=>filemtime($file)):$file); } }; }; closedir($dir); return $dirList;}########获取目录下所有文件,包括子目录 结束################
@si'); #定义需要过滤的恶意代码规则$file_count = array( 'all_file'=>0, #所有文件 'filter_file'=>0 #含有恶意代码文件);replaceUnwantedCode($path); #执行过滤#print_r($search_count);die;echo sprintf('从%s里共搜索到%s个符合条件的文件,其中%s个存在恶意代码已清理,原始文件保存在%s',$path, ($file_count['all_file']), ($file_count['filter_file']), $bak_path);die;function replaceUnwantedCode($path){ global $bak_path,$fileType,$search,$file_count; $path = str_replace(array('/','\\'), DIRECTORY_SEPARATOR, $path); if(!file_exists($path)||!is_dir($path)){ return ''; } if(substr($path, -1,1)==DIRECTORY_SEPARATOR){ $path = substr($path, 0,-1); } $dir=opendir($path); while($file=readdir($dir)){ #若有定义$fileType,并且文件类型不在$fileType范围内或文件是一个目录,则跳过 if($file!=='.'&&$file!=='..'){ $file = $path.DIRECTORY_SEPARATOR.$file; if(is_dir($file)){ replaceUnwantedCode($file); }elseif(!empty($fileType) && (in_array(pathinfo($file, PATHINFO_EXTENSION), $fileType))){ ################################ @$file_count['all_file']++; $fileContent = file_get_contents($file); #文件原始代码 $compile_fileContent = preg_replace($search, '', $fileContent); #过滤后的内容 if(strlen($fileContent) != strlen($compile_fileContent) && str_replace($bak_path, '', $file)==$file){ #过滤后文件长度不一致,则表示含有恶意代码(备份文件所在目录不过滤) $file_count['filter_file']++; ############备份原有文件 开始############### $bakFile = str_replace($path, $bak_path, $file); @make_dir(dirname($bakFile)); @file_put_contents($bakFile, $fileContent); ############备份原有文件 结束############### #重新写入过滤后的内容到原有的PHP文件 @file_put_contents($file, $compile_fileContent); } ################################ unset($fileContent,$compile_fileContent); } }; }; closedir($dir); return true;}########################## 辅助函数######################## /** * 检查目标文件夹是否存在,如果不存在则自动创建该目录 * * @access public * @param string folder 目录路径。不能使用相对于网站根目录的URL * * @return bool */function make_dir($folder){ $reval = false; if (!file_exists($folder)){ #如果目录不存在则尝试创建该目录 @umask(0); #将目录路径拆分成数组 preg_match_all('/([^\/]*)\/?/i', $folder, $atmp); #如果第一个字符为/则当作物理路径处理 $base = ($atmp[0][0] == '/') ? '/' : ''; #遍历包含路径信息的数组 foreach ($atmp[1] AS $val){ if ('' != $val){ $base .= $val; if ('..' == $val || '.' == $val){ #如果目录为.或者..则直接补/继续下一个循环 $base .= '/'; continue; } }else{ continue; } $base .= '/'; if (!file_exists($base)){ #尝试创建目录,如果创建失败则继续循环 if (@mkdir(rtrim($base, '/'), 0777)){ @chmod($base, 0777); $reval = true; } } } }else{ #路径已经存在。返回该路径是不是一个目录 $reval = is_dir($folder); } clearstatcache(); return $reval;}
您可能感兴趣的文章:
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号