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

Re: ^M und <? tags in PHP korrigieren


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/
.........|.........|.........|.........|.........|.........|.........|..