it-swarm-eu.dev

Jak mohu zabránit sledování pomocí ETAG?

ETAG je záhlaví HTTP, které se odesílá za scénami mezi webovým prohlížečem a webovým serverem. Tato hodnota je určena k řízení toho, jak dlouho je určitý soubor v mezipaměti na straně klienta.

Tato technologie má zajímavý vedlejší účinek; ETAG jsou uloženy v počítači, i když jsou soubory cookie smazány. Někteří lidé/software tuto skutečnost využili k tomu, aby ETAG „jednali“ jako cookie.

To znamená, že pouhé vymazání cookies nestačí. Jeden musí také vymazat celou webovou mezipaměť. Je to bolestivý proces, kterým projít pokaždé, když surfuji po síti na svém testovacím stroji.

Otázka

Jaký je nejspolehlivější způsob, jak zabránit sledování, ke kterému dochází v záhlaví ETAG?

31

Nevím o žádných skvělých řešeních. Navrhuji tři možné obhajoby, i když všechny mají svá omezení:

  • Privoxy Privoxy může blokovat záhlaví ETag.

    Zejména můžete použít crunch-server-header nebo server-header-filter ve vaší konfiguraci Privoxy k zablokování ETag: záhlaví ze serveru. Můžete také použít crunch-client-header nebo client-header-filter ve vaší konfiguraci Privoxy k zablokování If-None-Match: a If-Modified-Since: záhlaví od klienta. Nevím však o jakémkoli běžném vzorci, který můžete jednoduše chytit a použít: budete si muset sami sestavit svou vlastní konfiguraci Privoxy.

  • Váš prohlížeč Pokud používáte Firefox, můžete nakonfigurovat Firefox tak, aby vymazal mezipaměť při každém ukončení prohlížeče. To může být špatné pro výkon. Také s tímto přístupem lze ETagy stále použít ke sledování vás v rámci jedné relace prohlížeče, takže to není dokonalé, ale mělo by vymazat jakýkoli soubor ETag, když ukončíte prohlížeč.

  • RequestPolicy. Pokud používáte Firefox, můžete použít rozšíření RequestPolicy . Jeden autor zdůraznil, že RequestPolicy může pomoci bránit se sledování ETag . Webové stránky vás často sledují zahrnutím zdrojů od inzerentů nebo poskytovatelů analytiků třetích stran. RequestPolicy vám umožňuje řídit, jaké zdroje třetích stran bude váš prohlížeč vyžadovat při návštěvě webové stránky, a tak vám umožní chránit se před tímto druhem sledování: pokud váš prohlížeč nikdy nenačte zdroj inzerenta třetí strany, pak třetí strana inzerent nemá šanci vás sledovat (pomocí ETag nebo jiného mechanismu). Tato obrana je méně než ideální, protože vyžaduje, abyste své zásady pracovně sestavili, a protože webové stránky vás mohou sledovat přímo, pokud se nespoléhají na žádné zdroje třetích stran.

Bohužel, pokud přistupujete na web přes transparentní proxy, přítomnost proxy může komplikovat vaše pokusy vyhnout se sledování .

9
D.W.

Kromě více zapojených řešení navrhovaných @ D.W. Můžete zvážit použití režim soukromého prohlížení prohlížeče , ala InPrivate (IE), PrivateBrowsing (FF), inkognito (Chrome) atd.
Hlavní věc je, že mezipaměť prohlížeče se nepoužívá (nebo alespoň nepoužívá mimo délku soukromé relace). Váš prohlížeč tedy Etag neukládá.

Tento přístup má stále několik nevýhod, jako je sledování v relaci a proxy jako @ D.W. zmínil. To znamená, že je velmi jednoduché použití.

5
AviD

Pokud používáte prohlížeč Firefox, možná vás bude zajímat (volitelná) funkce mého doplňku SecretAgent ..., který vytvoří záhlaví spoof ETag pro potlačení sledování.

Nevýhodou je, že spoofing ETags zjevně naruší ukládání do mezipaměti na těch webech, které používají ETags k optimalizaci provozu (i když se zdá, že to má velmi malý dopad na výkon).

Viz www.secretagent.org.uk .

(Zřeknutí se odpovědnosti: Jsem autorem SecretAgent).

2
pete

update: napsal odpověď odlišně a jasněji

Mám řešení, které funguje bez úpravy stávajícího protokolu HTTP. Rád bych viděl implementaci tohoto.

Místo toho, abychom řekli serveru náš Etag , POVAŽUJEM server o jeho Etag a porovnáváme jej s tím, který již máme.

Pseudo kód:

If (file_not_in_cache)
{
    page=http_get_request();     
    page.display();
    page.put_in_cache();
}
else
{
    page=load_from_cache();
    client_etag=page.extract_etag();
    server_etag=http_HEAD_request().extract_etag();

    //Instead of saying "my etag is xyz",
    //the client says: what is YOUR etag, server?"

    if (server_etag==client_etag)
    {
        page.display();
    }
    else
    {
        page.remove_from_cache();
        page=http_get_request();     
        page.display();
        page.put_in_cache();
    }
}

Příklad konverzace HTTP s řešením 1:

Klient:

HEAD /posts/46328
Host: security.stackexchange.com

Server:

HTTP/1.1 200 OK
Date: Mon, 23 May 2005 22:38:34 GMT
Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux)
Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
ETag: "ABCDE"
Content-Type: text/html
Content-Length: 131

Případ 1, Klient má identický etag:

Connection closes, client loads page from cache.

Případ 2, klient má nesoulad etag:

GET...... //and a normal http conversation begins.

Úpravy: Je třeba poznamenat, že existuje menší režie, server musí odeslat HTTP hlavičku dvakrát: Jednou v reakci na HEAD a jednou v reakci na GET. Jedním teoretickým řešením je úprava protokolu HTTP a přidání nové metody, která vyžaduje obsah bez záhlaví. Poté by klient požádal o HEAD, a pak pouze obsah, pokud se neshodují etags).

Edit 2: Sledoval jsem rady výrobce makerofthings7 a zveřejnil to jako otázka na stackoverflow .

1
Hello World

Budoucím řešením by mohla být preference prohlížeče, která zakáže etagy.

V případě Mozilly je tento problém diskutován v: ETag: filtrování pro sledování webového sledování .

0
Changaco