[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: