Backslash u.a. im Serverlog verhindern
Norbert
- webserver
0 fastix®0 Vinzenz Mai0 Norbert
Hallo,
wie kann ich verhindern, dass Sonderzeichen wie Backslash, Single- und Doublequotes im Serverlog des Apachen auftauchen? Falls sie dies doch tun, stiften sie in der nachfolgenden Software heilose Verwirrung.
Hat da jemand eine Idee dazu ...
Gruss und Dank
Norbert
Moin!
Hat da jemand eine Idee dazu ...
Schick doch die Dateien durch einen Filter, der alles was Dir (nicht) passt löscht. tr, sed sind gute Ideen.
Für Windows gibts die guten Sachen hier: http://unxutils.sourceforge.net/
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Hai fastix®
Schick doch die Dateien durch einen Filter, der alles was Dir (nicht) passt löscht. tr, sed sind gute Ideen.
hmm,
wieso nacharbeiten, das muss man doch dem Apache auch so beibringen koennen ??!
Das Logging kann man doch komfortabel gestalten, da sollte doch auch eine Luecke fuer eine RegEx moeglich sein. Nur bin ich nicht der grosse Apache-Freak.
Gruss und Dank
Norbert
Moin!
Schick doch die Dateien durch einen Filter, der alles was Dir (nicht) passt löscht. tr, sed sind gute Ideen.
hmm,
wieso nacharbeiten, das muss man doch dem Apache auch so beibringen koennen ??!
Ja, klar. Das geht laut Apache-Manual aber auch schon beim Schreiben. Das folgende bezieht sich allerdings auf die Verwendung eines braucbaren Betriebssystems
httpd.conf:
custom log "|tr '' '/' >> /var/log/access_log" common
Du kannst statt dessen auch ein Skript schreiben:
custom log "|/root/bin/apache_log_filter_rotate.sh" common
/root/bin/apache_log_filter_rotate.sh:
#! /bin/sh
LogFileName=date +%Y\_%m\_%d
;
LogFileName="/var/log/apache2/access_log-$LogFileName";
echo $1 |tr "\" "/" | tr -d "'" |tr -d '"' >> $LogFileName;
Tauscht (Was immer das bringen soll) backslashes gegen slashes, und löscht alle einfachen und doppelten Quotes, schreibt nach /var/log/apache2/access_log-YYYY_MM_DD. Ist die Datei nicht vorhanden, so wird sie angelegt. Der Ordner "root" ist auf vielen Systemen nicht vorhanden, man nehme zum Bleistift das root des Servers, also /bin/root. Rechte von /root/bin/apache_log_filter_rotate.sh: rwxr-xr-x (0755)
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Malzeit,
Ja, klar. Das geht laut Apache-Manual aber auch schon beim Schreiben.
Das folgende bezieht sich allerdings auf die Verwendung eines braucbaren Betriebssystems
hmm,
schade, hier jibbet nur Linux ... :-((
Ein Script, was die Dateien beim rotate umbenennt habe ich schon.
Dem koennte ich ein nachtraegliches "Reparieren" auch uebertragen.
Das hat jedoch was von Flickschusterei ... :-(
Tauscht (Was immer das bringen soll) backslashes gegen slashes,
hmm,
also wenn da z.B. im Logfile steht:
... "http://www.google.de/find.php?q=asdf&l=de" ...
wird spaeter "asdf" extrahiert, was definitiv zu einem Error fuehren muss. IMHO hat Gott dafuer man urlencode erfunden und RFC 1738 fuer Lesekundige veroeffentlicht.
Warum der Indianer deren Gebrauch verweigert, weiss ich nicht.
Aber was solls, muss ich die paar Zeichen von Hand rausfeilen ... :-(
Gruss Norbert
Moin!
wird spaeter "asdf" extrahiert, was definitiv zu einem Error fuehren muss. IMHO hat Gott dafuer man urlencode erfunden und RFC 1738 fuer Lesekundige veroeffentlicht.
Warum der Indianer deren Gebrauch verweigert, weiss ich nicht.
Das tut er nicht. Du musst das halt nur in der pipe verbauen. Niemand hindert Dich daran.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Hai fastix®
muss noch mal nachfragen, Deine Fragmente verstehe ich nicht :-(
httpd.conf:
custom log "|tr '' '/' >> /var/log/access_log" common
hmm,
bei mir steht:
in der httpd.conf
LogFormat "$M[] = array('du'=>'%{%Y-%m-%d %H:%M:%S}t', 'ah'=>'%h', 'vs'=>'%v', 'pu'=>'%U', 'qs'=>'%{Query_String}e', 'ci'=>'%{Cookie}i', 'rf'=>'%{Referer}i', 'ua'=>'%{User-Agent}i', 'fi'=>'%{X-Forwarded-For}i', 'bs'=>'%{Accept-Language}i', 'rd'=>'%T');" tractit
und der sub.xtractit.de.conf
<VirtualHost *>
ServerAdmin info@xtractit.de
ServerName 4711.xtractit.de
DocumentRoot /home/www/xtractit.de/sub
ErrorLog /var/log/apache2/sub.xtractit.de-error_log
CustomLog /var/log/apache2/sub.xtractit.de-access_log tractit
</VirtualHost>
Damit wird ein Logfile erzeugt, welches von der nachfolgenden Software nur noch includiert werden braucht, um verarbeitet werden zu koennen, also alles sehr effektiv und performant.
Hat das Logfile eine bestimmte Groesse erreicht, wird es in einen temporaeren Ordner verschoben und bekommt eine Zeitmarke als Namen. Nach der Verarbeitung kommt es in die Endlagerstaette, wo es konserviert und in Watte gepackt wird ... ;-)
Wo genau sollten Deine Voodo-Zeichen da nun eingefuegt werden?
Ich kann mir darauf absolut keinen Reim machen ... :-((
Gruss Norbert
Moin!
in der sub.xtractit.de.conf
CustomLog "|pfad/zu/deinem/skript" tractit
(Geht auch ohne Quotas, wenn keine Leerzeichen oder ander Sonderzeichen drin vorkommen)
Das Skript sollte dann die gefilterten Daten nach /var/log/apache2/sub.xtractit.de-access_log wegschreiben.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Moin!
bei mir steht:
in der httpd.conf
LogFormat "$M[] = array('du'=>'%{%Y-%m-%d %H:%M:%S}t', 'ah'=>'%h', 'vs'=>'%v', 'pu'=>'%U', 'qs'=>'%{Query_String}e', 'ci'=>'%{Cookie}i', 'rf'=>'%{Referer}i', 'ua'=>'%{User-Agent}i', 'fi'=>'%{X-Forwarded-For}i', 'bs'=>'%{Accept-Language}i', 'rd'=>'%T');" tractit
Damit versuchst du, ein PHP-Array herzustellen.
Damit wird ein Logfile erzeugt, welches von der nachfolgenden Software nur noch includiert werden braucht, um verarbeitet werden zu koennen, also alles sehr effektiv und performant.
Nein. Das ist nur dann performant und effektiv, wenn das Logfile klein bleibt. Dazu tendieren Logfiles aber nicht.
Effektiver, performanter etc. ist es, das Logfile im nativen Format schreiben zu lassen, und es dann zeilenweise einzulesen, um daraus die benötigten Statistiken zu generieren. Ein Array mit sämtlichen Transaktionen wird nicht dauerhaft benötigt - es nimmt aber mit Sicherheit sehr viel Speicherplatz weg, der PHP nicht zwingend zur Verfügung steht. Typische Erlaubnisse für Speicher liegen z.B. bei 8 MB - wird dein Logfile so groß, gerätst du in Speicherprobleme, die du grundsätzlich nur verhindern kannst, indem du grundsätzlich keine größeren Logfiles schreibst, also das Logfile häufig genug rotierst.
Es existiert aber keine Abhängigkeit zwischen Logfilegröße und vergangener Zeit. Wenn monatliches Rotieren bislang Logfiles im Bereich von 4 MB produziert hat, dann reicht es aus, einmal auf einer bekannten Seite verlinkt zu werden, und du hast innerhalb von wenigen Stunden die zehnfache Menge an Logdaten - was bei der nächsten Auswertung dann zum unsanften Crash deiner Applikation führt.
Deshalb: Wenn du es von Anfang an richtig machen willst, schreibst du deine Statistik so, dass sie mit dem zeilenweisen Einlesen von Logfiles, bei denen es im Grundsatz egal ist, wie groß sie sind, klarkommt - und dann hast du auch kein Escaping-Problem mit Backslashes und Anführungszeichen, die ihrerseits ja im Kontext "PHP-Stringinhalt" Sonderbedeutung kriegen, die sie als schlichtes URL-Zeichen nicht haben. Der Apache ist nicht dafür vorgesehen, PHP-array-aufbauende Logfiles zu schreiben.
Hat das Logfile eine bestimmte Groesse erreicht, wird es in einen temporaeren Ordner verschoben und bekommt eine Zeitmarke als Namen. Nach der Verarbeitung kommt es in die Endlagerstaette, wo es konserviert und in Watte gepackt wird ... ;-)
Das hoffst du? Oder das ist so eingerichtet?
- Sven Rautenberg
Hallo Norbert,
wie kann ich verhindern, dass Sonderzeichen wie Backslash, Single- und Doublequotes im Serverlog des Apachen auftauchen? Falls sie dies doch tun, stiften sie in der nachfolgenden Software heilose Verwirrung.
passe die nachfolgende Software an, so dass sie keine Probleme mit Zeichen wie Backslash, Single- und Doublequotes hat.
Freundliche Grüße
Vinzenz
Hallo Vinzenz,
wie kann ich verhindern, dass Sonderzeichen wie Backslash, Single- und Doublequotes im Serverlog des Apachen auftauchen? Falls sie dies doch tun, stiften sie in der nachfolgenden Software heilose Verwirrung.
passe die nachfolgende Software an, so dass sie keine Probleme mit Zeichen wie Backslash, Single- und Doublequotes hat.
hmm,
keine Ahnung, ob man die einzelnen Hersteller dazu bewegen koennte.
Aber es waere auf jeden Fall effektiver, das von der Quelle aus zu bereinigen.
Wobei ich auch nicht verstehe, warum der Referer nicht urldecoded ins Logfile geschrieben wird.
IMHO ist das doch sonst ueberall so ueblich ...
Gruss und Dank
Norbert