PHP регулярное выражение для исправления взлома сайта WordPress

У меня есть клиент с несколькими установками WordPress, которые он не обновлял. В результате его взломали. Хотя я пытаюсь найти, как взломали хакеры, и устранить проблему навсегда, я пытаюсь создать скрипт, чтобы исправить их быстро, автоматически.

Я нашел этот скрипт, который делает то, что я хочу: http://designpx.com/tutorials/wordpress-security/

Он автоматически удаляет <?php eval(base64_decode("aWY..."); ?> Из каждого php-файла, но регулярное выражение, которое оно использует для этого, также удаляет <?php get_header(); ?> Если оно следует вредоносный код.

Итак, я хочу изменить его, поэтому он удаляет только вредоносный код, но не первую строку php-кода. Вот часть скрипта, который выполняет замену:

 find $dir -name "*.php" -type f \ |xargs sed -i 's#<?php /\*\*/ eval(base64_decode("aWY.*?>##g' 2>&1 

Что мне нужно изменить, чтобы оно остановилось при первом ?> , А не на втором?

Примечание . Я знаю, что это быстрое временное исправление, но оно будет действовать до тех пор, пока клиент не решит, какие сайты он хочет исправить, а что удалить.

Помимо комментариев, рекомендующих переустановить, вопрос регулярного выражения может быть жадностью. .*? placeholder должен соответствовать кратчайшему количеству символов, но sed может иметь некоторые ограничения относительно длины строки и т. д. (не уверен.)

Но для ограничения этого вы могли бы использовать [^>]* на своем месте:

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

Это гарантирует, что он не сможет выполнить закрытие ?> . В любом случае, base64 не может содержать этого.

  1. Резервная база данных и темы.
  2. Удалите WordPress.
  3. Удалите подозрительные файлы.
  4. Установите новый WordPress.
  5. Сохранять новые файлы WordPress
  6. Slap так называемый «администратор» для своевременного обновления.
  7. Прибыль.

Нет необходимости в каких-то сумасшедших сценариях и много чего. Hacks на PHP не могут работать, если файл не заражен. Снятие решения проблемы.

И да, это возможно, даже если у вас несколько установок WordPress на одном сервере (ПОЧЕМУ ?!).

Создайте резервную копию всего и сканируйте его с помощью антивируса. На вашем сервере удалите все wp-файлы, кроме wp-config.php, затем перейдите на страницу wordpress.org, чтобы загрузить последнюю версию. Извлеките компьютер и загрузите его.

Проверьте файлы резервных файлов для заражения.