PHP正则表达式修复被黑客入侵的Wordpress网站

时间:2012-10-21 17:15:58

标签: php regex wordpress sed

我有一个客户端有多个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

我需要更改什么,所以它会在第一个?>停止,而不是在第二个停止?

注意:我知道这是一个快速的临时解决方案,但它会一直存在,直到客户决定要修复哪些网站,哪一个要删除。

3 个答案:

答案 0 :(得分:7)

  1. 备份数据库和主题。
  2. 删除WordPress。
  3. 删除所有可疑文件。
  4. 安装最新 WordPress。
  5. 保持新的WordPress文件写保护
  6. Slap所谓的“管理员”,因为没有及时更新。
  7. 利润。
  8. 不需要一些疯狂的脚本和诸如此类的东西。除非文件被感染,否则PHP上的黑客无法工作。删除它解决了这个问题。

    是的,即使您在同一台服务器上安装了多个wordpress,也可以这样做(为什么?!)。

答案 1 :(得分:3)

除了建议重新安装的评论之外,手边的正则表达式问题可能是贪婪的。 .*?占位符应匹配最短的字符数,但sed可能对行长等有一些限制(不确定。)

但是为了进一步限制它,你可以在其位置使用[^>]*

 's#<?php /\*\*/ eval(base64_decode("aWY[^>]*?>##g'

这将确保它无法在结束?>上运行。无论如何base64都不可能包含这个。

答案 2 :(得分:1)

备份所有内容并使用防病毒软件进行扫描。在您的服务器中删除除wp-config.php之外的所有wp文件,然后转到wordpress.org下载最新版本。提取到您的计算机并上传。

检查备份主题文件是否存在感染。