Re: Un p'tit coup de main pour un grand nettoyage !
Bonjour. S'il vous plaît, essayez de répondre dans l'ordre, en dessous
(et en coupant ce qui est inutile (y compris ce paragraphe))...
Tourneur Henry-Nicolas a écrit, dimanche 13 avril 2008, à 23:21 :
> Le dimanche 13 avril 2008 à 22:41 +0200, Christophe Gallaire a écrit :
> > Tourneur Henry-Nicolas a dit dans un souffle :
> > >Le dimanche 13 avril 2008 à 21:13 +0200, Christophe Gallaire a écrit :
[...]
> > > > J'ai lu que la commande sed pouvait le faire mais je ne comprends pas trop
> > > > comment elle tourne la jolie...
> > > >
> > > > Quelqu'un a-t-il une idée ?
> > >
> > > find . -name "*.php" -exec sed -i 's/TA_LIGNE//' {} \;
> >
> > Cette ligne ne marche pas non plus. Le motif est trop complexe. Je n'arrive pas
> > à poster le code, alors le voilà en image :
> >
> > http://www.clg-montaigne-goussainville.ac-versailles.fr/images/imagesblogue/code.png
>
> Essaye avec une expression régulière.
> Essaye en remplaçant ta ligne par quelque chose du genre :
> echo \'<iframe src=\"*\" width=1 height=1></iframe>\';
Pas tout à fait...
$ echo \'<iframe
bash: iframe: Aucun fichier ou répertoire de ce type
Tout d'abord, il faudrait que Christophe vérifie si cette P*@!µ$ de
ligne de code tient bien sur une seule ligne, ou plusieurs --- c'est
important pour Sed.
Il faudrait aussi voir s'il y a des variantes, du code comme du
découpage, et s'il y a du code légitime ayant une structure analogue.
Par ailleurs le code vicieux contient des quotes simples ET doubles, ce
qui complique la citation dans une ligne de shell :
- 'TA_LIGNE' : la plus simple, on met tout entre quotes simples, mais
dans la citation de TA_LIGNE il faut les remplacer par '\'' (ou '"'"'
plus aisé sur clavier azerty) ;
- "TA_LIGNE" : certains caractères restent interprétables par le shell,
" ou ! par exemple doivent être protégés par une contre-oblique ---
sans oublier $(commande vicieuse) et autres...
- l'option -f de Sed, ou mieux « --script-file=FICHIER-SCRIPT », permet
d'éviter ces problèmes.
Il faut aussi voir si certains caractères ne sont pas interprétés par
Sed...
Dans TA_LIGNE figurent des « / », on peut les protéger, mais il est plus
simple d'écrire « s%TA_LIGNE%%g » (en vérifiant que le caractère % est
libre).
Je suggère commencer par chercher les unilignes douteuses :
find /reperts/php/ -type f -iname \*.php -exec grep -i \
'<[?]php echo '"'"'iframe.*width=1 height=1></iframe>'"'"';[?]>' {} +
ou tout simplement pêcher quelques échantillons de multilignes « à la
main » pour voir s'il y a des variantes, comparer avec les
faux-positifs, etc.
--
Jacques L'helgoualc'h
Reply to: