Мой WordPress сайт был заражен Eval (gzinflate (base64_decode (» хак.
Я хотел бы ssh на сервер и найти заменить все эти строки в моих файлах php ни с чем.
Я попробовал следующую команду:
find . -name "*.php" -print | xargs sed -i 'MY STRING HERE'
Я думаю, что это не работает, потому что строка имеет / персонажи внутри него, который я считаю нужным избежать.
Может кто-нибудь, пожалуйста, дайте мне знать, как избежать этих персонажей?
Заранее спасибо.
Я не пробовал так BACKUP ВАШИ ФАЙЛЫ ПЕРВЫЙ! Как уже упоминалось в некоторых комментариях, это не лучшая идея, возможно, лучше попробовать другие подходы. Во всяком случае, что по этому поводу?
find . -name "*.php" -type f -exec sed -i '/eval(gzinflate(base64_decode(/d' {} \;
если у вас есть Perl:
perl -p -i'.bck' -e 's/oldstring/newstring/g' `find ./ -name *.php`
=> все измененные файлы будут иметь резервную копию (суффикс ‘.bck’)
Баш предлагает различные разделители, такие как @% | ; : / в команде подстановки sed.
Следовательно, когда замещение включает в себя один из упомянутых разделителей, любой из других разделителей может использоваться в команде sed, так что нет необходимости избегать включенного разделителя.
Пример:
Когда замена / замена включает в себя «/», можно использовать следующее:
sed 's@/will/this/work@/this/is/working@g' file.txt
Возвращаясь к вашему вопросу, ваша замена / замена включает в себя «/», поэтому вы можете использовать любой из других разделителей.
find . -name "*.php" -print | xargs sed -i 's@/STRING/TO/BE/REPLACED@/REPLACEMENT/STRING@g'