O método melhor é ir para um de seus backups antes da intrusão e começar a partir daí. Parece que você quer uma maneira não-melhor. Você pode usar sed para fazer isso.
Usando o sed, a maneira mais simples de remover um bloco exato de texto em uma única linha é simplesmente usar o comando s
para removê-lo explicitamente:
sed -e 's!<?php /\*457563643457563643\*/ ?><?php /\*5467543654675436\*/ ?><?php /\*6745833567458335\*/ ?><?php /\*87934538793453\*/ ?>!!'
Isto apenas substitui a string exata que você citou com nada - é necessário escapar do *
metacaractere de cada vez, mas, caso contrário, isso está diretamente usando s!pattern!replacement!
da maneira usual.
Eu gostaria de usar find -exec
(melhor, -execdir
se você tiver ) em vez de canalizar xargs
, < em especial> se eu tivesse uma árvore de diretórios em que não confiava. Pode haver nomes de arquivos com todo tipo de coisas, notavelmente novas linhas, que podem levar à execução de comandos que você não gosta. Para esta linha de comando em particular do sed
, é improvável que seja um problema real, mas eu não contaria isso.
Você pode executar o grep
dentro do comando find
e só agir no arquivo se ele corresponder, ou apenas deixar sed
manipulá-lo de qualquer maneira - se o padrão não corresponder ao arquivo, o mesmo será feito depois de qualquer maneira.
Independentemente disso, eu ainda aconselho cautela - esses marcadores não são a parte prejudicial das coisas e os bits que são podem não ser tão óbvios.
Veja também: Como faço para lidar com um servidor comprometido?