www.fabiankeil.de/blog-surrogat/2006/04/05/privoxy-erweiterung-conditional-block.html

Privoxy-Erweiterung: +hide-referrer{conditional-block}

In Privoxy 3.0.3 kann der hide-referrer-Filter den Referer komplett entfernen, ihn mit einem konstanten Wert überschreiben, oder die Homepage als Referer angeben.

Alle drei Optionen habe den Vorteil, dem Webserver-Betreiber nicht die vorherige Adresse zu verraten, können vom Webserver-Betreiber aber dazu genutzt werden, den Privoxy-Nutzer vom Durchschnittsnutzer zu unterscheiden. Wenn die im Referer angegebene Seite keinen Link zur aufgerufenen Seite enthält, wird der Surfer seine Finger im Spiel haben.

Den Referer zu unterdrücken lohnt sich eigentlich nur beim Wechsel des Hosts. Wird der Host nicht gewechselt, liefert der Referer im Normalfall keine Daten, die der Server-Betreiber nicht auch anders gewinnen könnte.

Ein Klickpfad lässt sich auch über die IP-Nummer erstellen, wenn die IP-Nummer über Tor regelmäßig gewechselt wird ist der Privoxy-Nutzer auf kleineren Websites immer noch über den gefälschten Referer zu erkennen.

Eigenschaften der hide-referrer-Option

Um das Problem zu lösen habe ich hide-referrer um den Parameter conditional-block erweitert. Der Referer wird damit nur noch dann entfernt, wenn der Host gewechselt wurde (oder wenn der Speicher extrem knapp ist, was nicht vorkommen sollte).

Blick ins Log bei gesetztem debug 8

Wenn ich +hide-referrer{conditional-block} aktiviere und meine Link-Seite durch manuelle Eingabe der Adresse aufrufe sendet Firefox keinen Referer mit, der Filter muss nichts tun:

Apr 05 18:16:32 Privoxy(135133696) Header: New HTTP Request-Line: GET /links.html HTTP/1.1
Apr 05 18:16:32 Privoxy(135133696) Header: scan: GET /links.html HTTP/1.1
Apr 05 18:16:32 Privoxy(135133696) Header: scan: Host: www.fabiankeil.de
Apr 05 18:16:32 Privoxy(135133696) Header: scan: User-Agent: Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.8.0.1) Gecko/20060401 Firefox/1.5.0.1
Apr 05 18:16:32 Privoxy(135133696) Header: scan: Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Apr 05 18:16:32 Privoxy(135133696) Header: scan: Accept-Language: en,en-us;q=0.5
Apr 05 18:16:32 Privoxy(135133696) Header: scan: Accept-Encoding: gzip,deflate
Apr 05 18:16:32 Privoxy(135133696) Header: scan: Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Apr 05 18:16:32 Privoxy(135133696) Header: scan: Keep-Alive: 600
Apr 05 18:16:32 Privoxy(135133696) Header: scan: Proxy-Connection: keep-alive
Apr 05 18:16:32 Privoxy(135133696) Header: scan: Pragma: no-cache
Apr 05 18:16:32 Privoxy(135133696) Header: scan: Cache-Control: no-cache
Apr 05 18:16:32 Privoxy(135133696) Header: Modified: User-Agent: Ich bin's
Apr 05 18:16:32 Privoxy(135133696) Header: Suppressed offer to compress content
Apr 05 18:16:32 Privoxy(135133696) Header: crumble crunched: Keep-Alive: 600!
Apr 05 18:16:32 Privoxy(135133696) Header: crumble crunched: Proxy-Connection: keep-alive!
Apr 05 18:16:32 Privoxy(135133696) Header: addh-unique: Host: www.fabiankeil.de
Apr 05 18:16:32 Privoxy(135133696) Request: www.fabiankeil.de/links.html
Apr 05 18:16:47 Privoxy(135133696) Header: scan: HTTP/1.1 200 OK
Apr 05 18:16:47 Privoxy(135133696) Header: scan: Date: Wed, 05 Apr 2006 16:16:44 GMT
Apr 05 18:16:47 Privoxy(135133696) Header: scan: Server: Apache/df-exts 1.2 (Unix) mod_ssl/2.8.22 OpenSSL/0.9.7d AuthPG/1.3
Apr 05 18:16:47 Privoxy(135133696) Header: scan: Last-Modified: Sun, 19 Mar 2006 15:43:01 GMT
Apr 05 18:16:47 Privoxy(135133696) Header: scan: ETag: "25831d-15ae-441d7c05"
Apr 05 18:16:47 Privoxy(135133696) Header: scan: Accept-Ranges: bytes
Apr 05 18:16:47 Privoxy(135133696) Header: scan: Content-Length: 5550
Apr 05 18:16:47 Privoxy(135133696) Header: scan: Connection: close
Apr 05 18:16:47 Privoxy(135133696) Header: scan: Content-Type: text/html
Apr 05 18:16:47 Privoxy(135133696) Header: crumble crunched: Connection: close!
Apr 05 18:16:47 Privoxy(135133696) Header: scan: HTTP/1.1 200 OK
Apr 05 18:16:47 Privoxy(135133696) Header: scan: Date: Wed, 05 Apr 2006 16:16:44 GMT
Apr 05 18:16:47 Privoxy(135133696) Header: scan: Server: Apache/df-exts 1.2 (Unix) mod_ssl/2.8.22 OpenSSL/0.9.7d AuthPG/1.3
Apr 05 18:16:47 Privoxy(135133696) Header: scan: Last-Modified: Sun, 19 Mar 2006 15:43:01 GMT
Apr 05 18:16:47 Privoxy(135133696) Header: scan: ETag: "25831d-15ae-441d7c05"
Apr 05 18:16:47 Privoxy(135133696) Header: scan: Accept-Ranges: bytes
Apr 05 18:16:47 Privoxy(135133696) Header: scan: Content-Length: 5550
Apr 05 18:16:47 Privoxy(135133696) Header: scan: Content-Type: text/html
Apr 05 18:16:47 Privoxy(135133696) Header: scan: Connection: close
Apr 05 18:16:47 Privoxy(135133696) Header: crumble crunched: Connection: close!
Apr 05 18:16:47 Privoxy(135133696) Header: Adjust Content-Length to 5550

Weil ich keine coole Sau bin, lasse ich CSS auch am 5. April aktiviert, Firefox lädt also die CSS-Datei nach und gibt als Ursprungsseite http://www.fabiankeil.de/links.html an. Privoxy lässt den Referer unberührt passieren:

Apr 05 18:16:47 Privoxy(135134208) Header: New HTTP Request-Line: GET /style_v2.css HTTP/1.1
Apr 05 18:16:47 Privoxy(135134208) Header: scan: GET /style_v2.css HTTP/1.1
Apr 05 18:16:47 Privoxy(135134208) Header: scan: Host: www.fabiankeil.de
Apr 05 18:16:47 Privoxy(135134208) Header: scan: User-Agent: Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.8.0.1) Gecko/20060401 Firefox/1.5.0.1
Apr 05 18:16:47 Privoxy(135134208) Header: scan: Accept: text/css,*/*;q=0.1
Apr 05 18:16:47 Privoxy(135134208) Header: scan: Accept-Language: en,en-us;q=0.5
Apr 05 18:16:47 Privoxy(135134208) Header: scan: Accept-Encoding: gzip,deflate
Apr 05 18:16:47 Privoxy(135134208) Header: scan: Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Apr 05 18:16:47 Privoxy(135134208) Header: scan: Keep-Alive: 600
Apr 05 18:16:47 Privoxy(135134208) Header: scan: Proxy-Connection: keep-alive
Apr 05 18:16:47 Privoxy(135134208) Header: scan: Referer: http://www.fabiankeil.de/links.html
Apr 05 18:16:47 Privoxy(135134208) Header: Referer: http://www.fabiankeil.de/links.html (not changed, still on www.fabiankeil.de)
Apr 05 18:16:47 Privoxy(135134208) Header: scan: Pragma: no-cache
Apr 05 18:16:47 Privoxy(135134208) Header: scan: Cache-Control: no-cache
Apr 05 18:16:47 Privoxy(135134208) Header: Modified: User-Agent: Ich bin's
Apr 05 18:16:47 Privoxy(135134208) Header: Suppressed offer to compress content
Apr 05 18:16:47 Privoxy(135134208) Header: crumble crunched: Keep-Alive: 600!
Apr 05 18:16:47 Privoxy(135134208) Header: crumble crunched: Proxy-Connection: keep-alive!
Apr 05 18:16:47 Privoxy(135134208) Header: addh-unique: Host: www.fabiankeil.de
Apr 05 18:16:47 Privoxy(135134208) Request: www.fabiankeil.de/style_v2.css
Apr 05 18:16:55 Privoxy(135134208) Header: scan: HTTP/1.1 200 OK
Apr 05 18:16:55 Privoxy(135134208) Header: scan: Date: Wed, 05 Apr 2006 16:16:54 GMT
Apr 05 18:16:55 Privoxy(135134208) Header: scan: Server: Apache/df-exts 1.2 (Unix) mod_ssl/2.8.22 OpenSSL/0.9.7d AuthPG/1.3
Apr 05 18:16:55 Privoxy(135134208) Header: scan: Last-Modified: Sat, 10 Dec 2005 20:04:51 GMT
Apr 05 18:16:55 Privoxy(135134208) Header: scan: ETag: "258032-6ce-439b34e3"
Apr 05 18:16:55 Privoxy(135134208) Header: scan: Accept-Ranges: bytes
Apr 05 18:16:55 Privoxy(135134208) Header: scan: Content-Length: 1742
Apr 05 18:16:55 Privoxy(135134208) Header: scan: Connection: close
Apr 05 18:16:55 Privoxy(135134208) Header: scan: Content-Type: text/css
Apr 05 18:16:55 Privoxy(135134208) Header: crumble crunched: Connection: close!
Apr 05 18:16:55 Privoxy(135134208) Header: scan: HTTP/1.1 200 OK
Apr 05 18:16:55 Privoxy(135134208) Header: scan: Date: Wed, 05 Apr 2006 16:16:54 GMT
Apr 05 18:16:55 Privoxy(135134208) Header: scan: Server: Apache/df-exts 1.2 (Unix) mod_ssl/2.8.22 OpenSSL/0.9.7d AuthPG/1.3
Apr 05 18:16:55 Privoxy(135134208) Header: scan: Last-Modified: Sat, 10 Dec 2005 20:04:51 GMT
Apr 05 18:16:55 Privoxy(135134208) Header: scan: ETag: "258032-6ce-439b34e3"
Apr 05 18:16:55 Privoxy(135134208) Header: scan: Accept-Ranges: bytes
Apr 05 18:16:55 Privoxy(135134208) Header: scan: Content-Length: 1742
Apr 05 18:16:55 Privoxy(135134208) Header: scan: Content-Type: text/css
Apr 05 18:16:55 Privoxy(135134208) Header: scan: Connection: close
Apr 05 18:16:55 Privoxy(135134208) Header: crumble crunched: Connection: close!
Apr 05 18:16:55 Privoxy(135134208) Header: Adjust Content-Length to 1742

Als nächstes wird eine externe Seite über einen der Links aufgerufen. Wieder gibt Firefox als Ursprungsseite http://www.fabiankeil.de/links.html an, diesmal wird der Referer aber von Privoxy gefressen, für den Server-Betreiber sieht es so aus, als hätte ich die Seite direkt angegeben.

Apr 05 18:17:02 Privoxy(135134720) Header: New HTTP Request-Line: GET / HTTP/1.1
Apr 05 18:17:02 Privoxy(135134720) Header: scan: GET / HTTP/1.1
Apr 05 18:17:02 Privoxy(135134720) Header: scan: Host: minkasia.blogspot.com
Apr 05 18:17:02 Privoxy(135134720) Header: scan: User-Agent: Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.8.0.1) Gecko/20060401 Firefox/1.5.0.1
Apr 05 18:17:02 Privoxy(135134720) Header: scan: Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Apr 05 18:17:02 Privoxy(135134720) Header: scan: Accept-Language: en,en-us;q=0.5
Apr 05 18:17:02 Privoxy(135134720) Header: scan: Accept-Encoding: gzip,deflate
Apr 05 18:17:02 Privoxy(135134720) Header: scan: Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Apr 05 18:17:02 Privoxy(135134720) Header: scan: Keep-Alive: 600
Apr 05 18:17:02 Privoxy(135134720) Header: scan: Proxy-Connection: keep-alive
Apr 05 18:17:02 Privoxy(135134720) Header: scan: Referer: http://www.fabiankeil.de/links.html
Apr 05 18:17:02 Privoxy(135134720) Header: New host is: minkasia.blogspot.com. Crunching Referer: http://www.fabiankeil.de/links.html!
Apr 05 18:17:02 Privoxy(135134720) Header: Modified: User-Agent: Mozilla/5.0 (X11; U; NetBSD sparc64; fr-FR; rv:1.8.0.1) Gecko/20060403 Firefox/1.5.0.1
Apr 05 18:17:02 Privoxy(135134720) Header: Suppressed offer to compress content
Apr 05 18:17:02 Privoxy(135134720) Header: crumble crunched: Keep-Alive: 600!
Apr 05 18:17:02 Privoxy(135134720) Header: crumble crunched: Proxy-Connection: keep-alive!
Apr 05 18:17:02 Privoxy(135134720) Header: addh-unique: Host: minkasia.blogspot.com
Apr 05 18:17:02 Privoxy(135134720) Request: minkasia.blogspot.com/
Apr 05 18:17:08 Privoxy(135134720) Header: scan: HTTP/1.1 200 OK
Apr 05 18:17:08 Privoxy(135134720) Header: scan: Date: Wed, 05 Apr 2006 16:18:34 GMT
Apr 05 18:17:08 Privoxy(135134720) Header: scan: Server: Apache
Apr 05 18:17:08 Privoxy(135134720) Header: scan: Vary: Accept-Encoding
Apr 05 18:17:08 Privoxy(135134720) Header: scan: test: %{HOSTNAME}e
Apr 05 18:17:08 Privoxy(135134720) Header: scan: Last-Modified: Tue, 04 Apr 2006 15:34:17 GMT
Apr 05 18:17:08 Privoxy(135134720) Header: scan: ETag: "2164a2f-e644-443291f9"
Apr 05 18:17:08 Privoxy(135134720) Header: scan: Accept-Ranges: none
Apr 05 18:17:08 Privoxy(135134720) Header: scan: Content-Length: 58948
Apr 05 18:17:08 Privoxy(135134720) Header: scan: Keep-Alive: timeout=15, max=100
Apr 05 18:17:08 Privoxy(135134720) Header: scan: Connection: Keep-Alive
Apr 05 18:17:08 Privoxy(135134720) Header: scan: Content-Type: text/html
Apr 05 18:17:08 Privoxy(135134720) Header: crumble crunched: Connection: Keep-Alive!
Apr 05 18:17:08 Privoxy(135134720) Header: crumble crunched: Keep-Alive: timeout=15, max=100!
Apr 05 18:17:09 Privoxy(135134720) Header: scan: HTTP/1.1 200 OK
Apr 05 18:17:09 Privoxy(135134720) Header: scan: Date: Wed, 05 Apr 2006 16:18:34 GMT
Apr 05 18:17:09 Privoxy(135134720) Header: scan: Server: Apache
Apr 05 18:17:09 Privoxy(135134720) Header: scan: Vary: Accept-Encoding
Apr 05 18:17:09 Privoxy(135134720) Header: scan: test: %{HOSTNAME}e
Apr 05 18:17:09 Privoxy(135134720) Header: scan: Last-Modified: Tue, 04 Apr 2006 15:34:17 GMT
Apr 05 18:17:09 Privoxy(135134720) Header: scan: ETag: "2164a2f-e644-443291f9"
Apr 05 18:17:09 Privoxy(135134720) Header: scan: Accept-Ranges: none
Apr 05 18:17:09 Privoxy(135134720) Header: scan: Content-Length: 58948
Apr 05 18:17:09 Privoxy(135134720) Header: scan: Content-Type: text/html
Apr 05 18:17:09 Privoxy(135134720) Header: scan: Connection: close
Apr 05 18:17:09 Privoxy(135134720) Header: crumble crunched: Connection: close!
Apr 05 18:17:09 Privoxy(135134720) Header: Adjust Content-Length to 59035

Benutzung

+hide-referrer{conditional-block} wird wie jeder andere Filter über das Webinterface oder über den Texteditor aktiviert.

Die Patches

Der letzte Patch sorgt zusätzlich für ausführlichere Debug-Informationen und lässt Privoxy alle Dokumente filtern, bei denen der Content-Type irgendwo die Zeichenkette xml enthält. Benötigt wird das für manche Newsfeeds und für XHTML-Websites deren Erschaffer die W3C-Empfehlungen befolgen.

Vorsichtig geschätzt sind 99% der XHTML-Benutzer inkompetente Nasenbären, die XHTML nur wegen der flotten Banner einsetzen, ihre Seiten aber als text/html ausgeben und somit als defektes HTML rendern lassen. Irgendwann könnte es aber Hirn regnen, mit dem Patch ist man vorbereitet.

Weiterhin sorgt der Patch dafür, dass Privoxy auch die statischen Ersatz-Referer akzeptiert, die nicht mit http:// anfangen. Solche Referer sind keine gute Idee, aber das muss der Benutzer selbst entscheiden. Kleiner Log-Auszug dazu:

Apr 05 16:16:01 Privoxy(135133696) Header: Parameter: +hide-referrer{Ich bin eine Schnarchnase und anhand meines Referers leicht zu erkennen.} is a bad idea but I don't care.
Apr 05 16:16:01 Privoxy(135133696) Header: Referer overwritten with: Referer: Ich bin eine Schnarchnase und anhand meines Referers leicht zu erkennen.

Abgelaufen

Die Patche auf dieser Seite sind veraltet, der Sammelpatch enthält aktualisierte Fassungen. Weitere Auswirkungen des Patches sind zusammen mit Hinweisen zur Installation auf der Seite Minor Privoxy improvements aufgeführt.