shell — массовое удаление вредоносной строки из php файлов

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

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

С помощью:

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

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

1

Решение

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

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

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

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

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

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

1

Другие решения

Используйте 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 для получения дополнительной информации.

1

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

0
По вопросам рекламы [email protected]