Массовое удаление вредоносной строки из php-файлов

Здесь кратко рассмотрено: Удаление строки в файле PHP с помощью Start и End, но я ищу решение для того же кода. Первая строка каждого файла PHP на сервере начинается с <?php if(!isset($GLOBALS[ и заканчивается на -1; ?> в середине – длинная строка кода, которая варьируется от файла к файлу.

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

С помощью:

 sed -e '1 s/^<\?php if(!isset($GLOBALS\[.*-1; \?>//' *.php 

в среде UNIX печатает файл PHP без кода, но не сохраняет его. Что мне не хватает?

Я написал сценарий для очистки всех файлов во всех каталогах и подкаталогах. Я рекомендую вам резервное копирование 1-го. Это делается изнутри оболочки

Сначала создайте файл с именем fixmacro в своем домашнем каталоге и добавьте к нему следующие 2 строки

 :1/ua=strtolower/s/^.*<?php$/<?php/ :wq 

Далее из каталога, где находятся зараженные файлы, или вы можете запустить его из своего домашнего каталога, выполните следующую команду.

 find . -name *.php -exec vi -s ~/fixmacro {} \; 

Это пойдет на каждый поиск php для зараженных линий и удалит их. Если это не зараженные файлы, он сохраняет файл без изменений /

Используйте параметр sed -i , чтобы sed модифицировал файлы PHP.

 -i[SUFFIX], --in-place[=SUFFIX] edit files in place (makes backup if extension supplied) 

Часть [SUFFIX] является необязательной, но некоторые реализации sed требуют, чтобы вы ее предоставили.

В вашем случае вы можете попробовать следующее:

 sed -i.bak 's/^<\?php if(!isset($GLOBALS\[.*-1; \?>//' *.php 

Читайте man sed для получения дополнительной информации.

Получил это, спасибо за совет по использованию -i. Рабочая команда: sed -i.bak 's/^<\?php if(!isset($GLOBALS\[.*-1; \?>//' *.php