www.fabiankeil.de/blog-surrogat/2006/01/26/firefox-user-agent-generator.html
Trotz anders lautenden Gerüchten sind weder Privoxy noch uagen.pl
für Bugs in Online-Shops verantwortlich.
Siehe dazu auch: Kleiner Realitätsabgleich
für die OXID eSales GmbH.
uagen
generiert einen zu einer beliebigen Firefox-Version passenden User-Agent und
schreibt ihn in eine Privoxy-Action-Datei. Das lästige User-Agent-Ändern kann damit über
cron
automatisiert werden.
Bei der Verwendung von Tor ändert sich die vom Server wahrgenommene IP zwar etwa alle zehn Minuten, die von Privoxy gefälschte Browser-Kennung bleibt jedoch konstant und kann, je nach Wahl, zur pseudonymen Benutzer-Identifizierung benutzt werden.
Es gibt das Konzept, einfach den User-Agent von einer Firefox-Windows-Version zu nehmen, also den gleichen User-Agent wie tausend andere zu benutzen und in der Menge zu verschwinden. Damit erhöht man aber gleichzeitig die vom Server-Betreiber gemessene Zahl der Windows-Nutzer – schlecht für das Karma.
Besser ist es, den User-Agent regelmäßig zu ändern, bei der Wahl des vorgegebenen Betriebssystems das Karma aber nicht zu gefährden. Nebenbei sorgt man so für eine bessere User-Agent-Mischung im Server-Logfile, in der auch Nicht-Windows-Benutzer ohne manipuliertem User-Agent weniger auffallen – gut für das Karma.
Seit Version 0.3 kann uagen
Privoxy auch dazu veranlassen, den
Accept-Language
-Header passend zum User-Agent zu fälschen, dazu wird zusätzlich
die Privoxy-Aktion
hide-accept-language
benötigt (in Privoxy-Versionen ab 3.0.5 beta bereits enthalten).
Standardmäßig wird der Accept-Language
-Header zwar nicht mit protokolliert,
doch technisch ist es problemlos möglich und er kann auch ohne Protokollierung zur Erkennung
von gefälschten User-Agent
s genutzt werden.
Eine Reihe von Parametern können uagen
auf der Kommandozeile übergeben werden,
--help
zeigt welche:
fk@TP51 ~ $uagen --help uagen 1.0.6 Copyright (C) 2006-2007 Fabian Keil <fk@fabiankeil.de> http://www.fabiankeil.de/sourcecode/uagen/ Options and their default values if there are any: [--action-file /etc/privoxy/user-agent.action] [--action-injection] [--browser-release-date 20070301] [--browser-revision 1.8.1.2] [--browser-version 2.0.0.2] [--clean-prefs-file] [--help] [--language-overwrite en-AU,en-GB,en-CA,en-NZ,en-US,en-ZW,es-ES,de-DE,de-AT,de-CH,fr-FR,sk-SK,nl-NL,no-NO,pl-PL] [--logfile /var/log/uagen.log] [--loop] [--no-action-file] [--no-hide-accept-language] [--no-logfile] [--prefs-file] [--quiet] [--silent] [--sleeping-time 5] [--version] see "perldoc /home/fk/scripts/uagen.pl" for more information
Es gibt keine Pflicht-Optionen.
uagen
kann von Hand aufgerufen werden:
fk@TP51 ~ $uagen --action-file /usr/jails/privoxy-jail/usr/local/etc/privoxy/user-agent.action --no-logfile User Agent: Mozilla/5.0 (X11; U; NetBSD i386; de-DE; rv:1.8.0.6) Gecko/20060813 Firefox/1.5.0.6
Oder auch über cron
:
fk@TP51 ~ $grep uagen /etc/crontab */5 * * * * privoxy /usr/local/bin/uagen --action-file /usr/local/etc/privoxy/user-agent.action
Den User-Agent alle fünf Minuten zu ändern ist etwas übertrieben, verursacht anderseits aber auch keine irgendwie spürbare Last und erleichtert das Testen. Firefox ruft News-Feeds etwa einmal pro Stunde ab, falls man News-Feeds in Firefox nutzt, sollte das User-Agent-Wechsel-Intervall also darunter liegen.
Im Normallfall schreibt uagen
die Action-Datei einmal und beendet sich anschließend,
kann aber über die Option --loop
in eine Schleife geschickt werden. Sinnvoll
für kurze Tests, oder falls cron
nicht verfügbar ist.
Momentan protokolliert uagen
jeden Wechsel in /var/log/uagen.log
,
ebenfalls eine Testerleichterung, ansonsten recht überflüssig:
fk@TP51 ~ $tail -f /var/log/uagen.log uagen.pl (2006/01/25 19:20) User Agent: Mozilla/5.0 (X11; U; OpenBSD amd64; es-ES; rv:1.8) Gecko/20060118 Firefox/1.5 uagen.pl (2006/01/25 19:25) User Agent: Mozilla/5.0 (X11; U; NetBSD sparc64; en-GB; rv:1.8) Gecko/20060116 Firefox/1.5 uagen.pl (2006/01/26 11:30) User Agent: Mozilla/5.0 (X11; U; FreeBSD sparc64; es-ES; rv:1.8) Gecko/20051230 Firefox/1.5 uagen.pl (2006/01/26 11:35) User Agent: Mozilla/5.0 (X11; U; FreeBSD alpha; es-ES; rv:1.8) Gecko/20060102 Firefox/1.5 uagen.pl (2006/01/26 11:40) User Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; de-DE; rv:1.8) Gecko/20060110 Firefox/1.5 uagen.pl (2006/01/26 11:45) User Agent: Mozilla/5.0 (X11; U; FreeBSD amd64; de-DE; rv:1.8) Gecko/20060108 Firefox/1.5 uagen.pl (2006/01/26 11:50) User Agent: Mozilla/5.0 (X11; U; Linux i586; es-ES; rv:1.8) Gecko/20051208 Firefox/1.5 uagen.pl (2006/01/26 11:55) User Agent: Mozilla/5.0 (X11; U; Linux i686; de-DE; rv:1.8) Gecko/20051202 Firefox/1.5 uagen.pl (2006/01/26 12:00) User Agent: Mozilla/5.0 (X11; U; OpenBSD sparc64; de-DE; rv:1.8) Gecko/20051212 Firefox/1.5 uagen.pl (2006/01/26 12:05) User Agent: Mozilla/5.0 (X11; U; Linux i686; de-DE; rv:1.8) Gecko/20060119 Firefox/1.5 uagen.pl (2006/01/26 12:10) User Agent: Mozilla/5.0 (Macintosh; U; 68K Mac OS X Mach-O; en-US; rv:1.8) Gecko/20051209 Firefox/1.5 uagen.pl (2006/01/26 12:15) User Agent: Mozilla/5.0 (Macintosh; U; 68K Mac OS X Mach-O; de-DE; rv:1.8) Gecko/20051218 Firefox/1.5 uagen.pl (2006/01/26 12:20) User Agent: Mozilla/5.0 (X11; U; Linux i586; de-DE; rv:1.8) Gecko/20051211 Firefox/1.5 uagen.pl (2006/01/26 12:25) User Agent: Mozilla/5.0 (X11; U; OpenBSD sparc64; de-DE; rv:1.8) Gecko/20051213 Firefox/1.5
Die Zeile:
/var/log/privoxy/privoxy.log privoxy:privoxy 640 30 100 * JB /var/run/privoxy.pid
in /etc/newsyslog.conf
sorgt für regelmäßiges Rotieren der Log-Datei.
In Privoxys Konfigurations-Datei sollte die von uagen
erzeugte Action-Datei
hinter standard.action
und vor user.action
eingebunden werden, so können in user.action
noch Ausnahmen festgelegt werden.
actionsfile standard # Internal purpose, recommended actionsfile default # Main actions file actionsfile user-agent # Random Firefox User agent actionsfile user # User customizations
uagen
unter Windows
Unter Windows ist standardmäßig weder Perl noch cron
verfügbar,
beides kann aber über Cygwin nachinstalliert werden.
Zwingend erforderlich ist für uagen
nur ein Perl-Interpreter.
Bevor uagen
getestet wird, sollte sichergestellt werden, dass der Perl-Interpreter
korrekt installiert ist. Dazu öffnet man über Start/Ausführen/cmd die Windows-Kommandozeile,
gibt dort den Pfad zum Perl-Interpreter ein und hängt den Parameter -e
gefolgt von einem beliebigen Perl-Programm, zum Beispiel 'print "Test erfolgreich\n"'
, an.
Wurde Cygwin nach E:\Programme\cygwin
installiert, könnte die Verfügbarkeit von Perl mit:
E:\Programme\cygwin\bin\perl.exe -e 'print "Test erfolgreich\n"'
getestet werden. Erscheint keine Fehlermeldung, steht der Nutzung von uagen
nichts mehr im Wege, anstelle von -e 'print "Test erfolgreich\n"'
werden dazu
der volle Pfad zu uagen
und anschließend die uagen
-Parameter
eingegeben. Zum Beispiel
E:\Programme\cygwin\bin\perl.exe E:\Programme\cygwin\bin\uagen.pl --action-file /cygdrive/e/Programme/privoxy-cvs/user-agent.action
Wichtig ist, dass Cygwins Perl-Interpreter Verzeichnisse korrekt mit /
trennt,
auf die Laufwerks-Metapher verzichtet und den Unterschied zwischen Groß- und Kleinbuchstaben kennt.
Aus E:\Programme\privoxy-cvs/user-agent.action
wird /cygdrive/e/Programme/privoxy-cvs/user-agent.action
.
Falls keine Fehlermeldung erscheint, wurde die Action-Datei erfolgreich geschrieben und
kann in Privoxy's Konfigurations-Datei ergänzt werden, anschließend sollte sie unter
http://config.privoxy.org/show-status
aufgelistet werden.
Falls noch eine ungepatchte Privoxy-Version 3.0.3 genutzt wird, beendet sich Privoxy mit
einer Fehlermeldung, da die Aktion hide-accept-language
nicht bekannt ist.
Deren Generierung kann über die Option --no-hide-accept-language
verhindert werden,
die einfach an die anderen uagen
-Parameter angehängt wird.
Die so erzeugte Action-Datei bereitet auch unter Privoxy 3.0.3 keine Probleme mehr, ein Privoxy-Update wäre natürlich die bessere Lösung, Privoxy 3.0.3 ist stark veraltet.
Wird zusätzlich der Parameter --loop
genutzt, wird die Action-Datei
alle fünf Minuten neu generiert, die Pause lässt sich über --sleeping-time X
verändern.
Wenn die richtige uagen
-Kommandozeile gefunden ist, kann man sie
über eine Desktop-Verknüpfung klickbar machen. Dazu wird mir der rechten
Maustaste auf den Desktop geklickt, und Neu/Verknüpfung
ausgewählt.
Im daraufhin erscheinenden Assistenten
wird nicht auf den Durchsuchen
-Button
geklickt, sondern die gesamte uagen
-Kommandozeile als Speicherort des Elements
einkopiert. Nach dem Druck auf den Weiter-Button kann eine beliebiger Name der Verknüpfung
festgelegt werden, anschließend ist uagen
direkt über den Desktop erreichbar.
Um uagen
automatisch zu starten, kann die Verknüpfung zusätzlich
in das Autostart-Verzeichnis (Start/Programme/Autostart
) gezogen werden.
general.useragent.override
ändern
Seit Version 1.0.5 kann uagen
die generierte Browser-Kennung auch
in Mozilla-prefs-Dateien speichern. Dazu gibt es zwei neue Parameter: --prefs-file
und --clean-prefs-file
.
Über --prefs-file
wird der Speicherort der prefs-Datei angegeben, bei Firefox auf Unix-Derivaten
ist das im Normalfall ~/.mozilla/firefox/*.default/prefs.js
, vorausgesetzt man möchte das
Standard-Profil ändern. Über die zusätzliche Option --clean-prefs-file
wird die Kennung wieder
entfernt. Nötig ist das nur, wenn die Original-Kennung wieder hergestellt werden soll.
Direktes Editieren der prefs-Datei hat den Vorteil, auch bei verschlüsselten Verbindungen zu wirken,
bei denen Privoxys Filter-Funktionen umgangen werden. Es hat den Nachteil, dass die Datei nur beim
Start des Browsers interpretiert wird, spätere Änderungen werden ignoriert. --prefs-file
ist also lediglich als Ergänzung gedacht, nicht aber als Ersatz für die Erzeugung der Privoxy-Action-Datei.
Am Kopf von Firefox' prefs-Datei wird ausdrücklich vor Veränderungen im laufenden Betrieb gewarnt.
Der User-Agent wird wie folgt zusammen gesetzt:
my $firefox_user_agent = sprintf "Mozilla/%s (%s; %s; %s; %s; %s) Gecko/%s Firefox/%s", $mozillaversion, $platform, $security, $os_or_cpu, $locale, $revision, $creation_time, $firefoxversion;
Die meisten Variablen-Namen kommen aus dem als Vorlage dienenden User-Agent-Dokument von mozilla.org, die User-Agent-Seite der Wikipedia wurde ebenfalls genutzt.
Die Werte für $mozillaversion
, $security
, $revision
und
$firefoxversion
sind konstant, die restlichen Werte werden pseudo-zufällig gewählt.
$os_or_cpu
setzt sich aus zwei voneinander abhängigen Teilen zusammen,
dem Betriebssystem und der Hardware.
Für $creation_time
wählt uagen
einen Tag der zwischen dem aktuellen Datum
und dem Release-Datum liegt. Das Standard-Release-Datum kann über die Kommandozeile überschrieben werden,
dabei sollten aber die Firefox-Version und gegebenfalls die Revision ebenfalls angepasst werden,
ansonsten könnte ein ungültiger User-Agent
generiert werden.
Seit ein paar Jahren wird uagen
mit den Privoxy-Quellen ausgeliefert
und ist in vielen Privoxy-Paketen enthalten,
kann aber natürlich auch über git
beschafft werden.
uagen
steht unter der von OpenBSD übernommenen
BSD-Lizenz.
Die Datei-Endung .pl
ist auf den meisten Betriebssystemen nicht nötig und kann nach dem
Runterladen entfernt werden.
uagen
sollte auf allen mit Perl ausgestatteten Rechnern laufen.
Diese Seite ist unvollständig und wird nur unregelmäßig aktualisiert, uagen
kommt
aber mit Dokumentation, die über perldoc uagen
angezeigt werden kann.