我有一个客户端有多个Wordpress安装,他没有及时更新。结果,他被黑了。当我试图找到黑客如何进入并永久修复问题时,我正在尝试创建一个脚本来自动快速修复它们。
我找到了这个脚本,它可以满足我的需求:http://designpx.com/tutorials/wordpress-security/
它会自动从每个php文件中删除<?php eval(base64_decode("aWY..."); ?>
,但是它用来执行此操作的正则表达式,如果它遵循恶意代码,也会删除<?php get_header(); ?>
。
所以,我想要的是改变它,所以它只删除恶意代码,但不是第一行的PHP代码。以下是执行替换的脚本部分:
find $dir -name "*.php" -type f \
|xargs sed -i 's#<?php /\*\*/ eval(base64_decode("aWY.*?>##g' 2>&1
我需要更改什么,所以它会在第一个?>
停止,而不是在第二个停止?
注意:我知道这是一个快速的临时解决方案,但它会一直存在,直到客户决定要修复哪些网站,哪一个要删除。
答案 0 :(得分:7)
不需要一些疯狂的脚本和诸如此类的东西。除非文件被感染,否则PHP上的黑客无法工作。删除它解决了这个问题。
是的,即使您在同一台服务器上安装了多个wordpress,也可以这样做(为什么?!)。
答案 1 :(得分:3)
除了建议重新安装的评论之外,手边的正则表达式问题可能是贪婪的。 .*?
占位符应匹配最短的字符数,但sed
可能对行长等有一些限制(不确定。)
但是为了进一步限制它,你可以在其位置使用[^>]*
:
's#<?php /\*\*/ eval(base64_decode("aWY[^>]*?>##g'
这将确保它无法在结束?>
上运行。无论如何base64
都不可能包含这个。
答案 2 :(得分:1)
备份所有内容并使用防病毒软件进行扫描。在您的服务器中删除除wp-config.php之外的所有wp文件,然后转到wordpress.org下载最新版本。提取到您的计算机并上传。
检查备份主题文件是否存在感染。