[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: ^M und <? tags in PHP korrigieren
[Thread Prev] | [Thread Next]
- Subject: Re: ^M und <? tags in PHP korrigieren
- From: "Raphael H. Becker" <Raphael.Becker@xxxxxx>
- Date: Fri, 16 Sep 2005 01:34:12 +0200
- To: uugrn@xxxxxxxxxxxxxxx
On Thu, Sep 15, 2005 at 10:32:02PM +0200, Raphael H. Becker wrote: > find /var/www -name "*.ht*" -o -name "*.php" | > sed -e "s,^,',; s,$,',;" | xargs clear_php.sh > > http://rabe.uugrn.org/scripts/clear_php.sh Schwachstelle: Hierbei werden immer alle Dateien konvertiert, auch wenn sie die gesuchten Eigenschaften nicht besitzt. Abhilfe: bei der Auswahl der Dateien schon die Dateien vorfiltern, die Kandidaten fuer eine Konvertierung sind, in diesem speziellen Fall also ein find /var/www -name "*.ht*" -o -name "*.php" | sed -e "s,^,',; s,$,',;" | xargs egrep -l '(\r|<? )' | sed -e "s,^,',; s,$,',;" | xargs clear_php.sh egrep -l gibt auf stdout nur die Dateinamen aus, die auf entweder \r oder "<? " matchen und wirft diese dann mittels eines zweiten sed|xargs dem script vor. BTW: Hier wuerde find ... -print0 | xargs -0 versagen, denn das egrep wuerde die Dateiliste nicht \0 separiert ausgeben, sondern immer zeilenweise, also \n separiert. Deswegen mann man beim zweiten xargs kein -0 verwenden und muss daher zum workaround mit sed greifen. Auch das Filterscript ansich liesse sich noch verfeinern: Nach dem Konvertieren wird TMPFILE nicht direkt zurueckgeschrieben, sondern vor dem Zurueckschreiben noch geprueft, ob es ueberhaupt Aenderungen gab, um wirkungslose Konvertierungen nicht zurueckzuschreiben (timestamps wuerden sich aendern!). Eine Ueberpruefung kann zB aufgrund der md5-Summe einer Datei erfolgen: if ( md5 -r bla.php bla.php.tmp | cut -f 1 -d " " | { read X1 ; read X2 ; test "$X1" != "$X2" ; } ) ; then # Dateien sind ungleich! # Datei zurueckschreiben (mv) else # Dateien sind identisch, nicht zurueckschreiben, tempfile loeschen fi Die Syntax von md5 sollte fuer Linux geprueft werden, in FreeBSD passiert sowas: $ md5 -r bla.php bla.php.tmp f2cca3f83140b43b3e70afebad997365 bla.php fec3765b0f1ee982ea6eddda49403583 bla.php.tmp $ md5 -r bla.php bla.php.tmp | cut -f 1 -d " " f2cca3f83140b43b3e70afebad997365 fec3765b0f1ee982ea6eddda49403583 Weiterere Anwendungsbereiche: * mp3-files modifizieren (zB ID3-Tags zufuegen) * Grafiken modifizieren (zB Wasserzeichen einblenden) MfG -- Raphael Becker http://rabe.uugrn.org/ http://schnitzelmitkartoffelsalat.und.rahmspin.at/ .........|.........|.........|.........|.........|.........|.........|..