这会保护我免受Etag追踪吗?

时间:2013-12-02 18:36:25

标签: http tracking privacy etag cookieless

背景:ETag跟踪得到了很好的解释here,也在Wikipedia上提及。

answer我在回答“我怎样才能防止ETag跟踪?”中写道。促使我写下这个问题。

我有一个浏览器端解决方案,可以防止ETag跟踪。它无需修改当前的HTTP协议即可运行。 这是ETag跟踪的可行解决方案吗?

而不是告诉服务器我们的ETag 我们向服务器询问其ETag ,而不是将它与我​​们已经拥有的那个进行比较。

伪代码:

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();
    }
}

我的解决方案的HTTP会话示例:

客户端:

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

服务器:

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: "EVIl_UNIQUE_TRACKING_ETAG"
Content-Type: text/html
Content-Length: 131

案例1,客户有一个相同的ETag:

Connection closes, client loads page from cache.

案例2,客户端的ETag不匹配:

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

需要修改HTTP规范的附加内容

将以下内容视为理论材料,HTTP规范可能不会很快改变。

1。删除HEAD开销

值得注意的是,存在较小的开销,服务器必须两次发送HTTP头:一次响应HEAD,一次响应GET。一个理论上的解决方法是修改HTTP协议并添加一个请求无标头内容的新方法。然后客户端只会请求HEAD,之后只有内容,如果ETags不匹配。

2。防止基于缓存的跟踪(或者至少使其变得更加困难)

虽然Sneftel建议的解决方法不是ETag跟踪技术,但即使他们使用我建议的“HEAD,GET”序列,它也能跟踪人们。解决方案是限制ETag的可能值:ETag必须是内容的校验和,而不是任何序列。客户端对此进行检查,如果校验和值与服务器发送的值不匹配,则不使用缓存。

旁注:修复2还会消除以下Evercookie跟踪技术:pngData,etagData,cacheData。将其与Chrome的“仅保留本地数据,直到我退出浏览器”相结合,消除了除Flash和Silverlight cookie之外的所有evercookie跟踪技术。

3 个答案:

答案 0 :(得分:5)

这听起来很合理,但存在变通方法。假设首页总是被赋予相同的etag(以便返回的访问者总是从缓存中加载它),但是每次加载时页面本身都会引用一个命名不同的图像。然后,您对此图像的GET或HEAD请求将唯一标识您。可以说这不是基于etag的攻击,但它仍然使用你的缓存识别你。

答案 1 :(得分:3)

只要使用任何缓存,即使HTTP更改,也存在潜在的漏洞利用。假设主页面包含100个图像,每个图像从2个图像的潜在池中随机抽取。

当用户返回该站点时,她的浏览器会重新加载该页面(因为校验和不匹配)。平均而言,100个图像中的25个将从之前缓存。这种组合可以(几乎可以肯定)用于单独指纹用户。

有趣的是,这几乎就是DNA亲子鉴定的工作原理。

答案 2 :(得分:0)

服务器可以检测到对于多个资源,您执行的HEAD请求后面没有针对同一资源的GET。这可以告诉你是不是在玩扑克。

只需缓存一些资源,就可以存储信息。只要您不重新请求页面上指定的资源,服务器就可以推断出该信息。

以这种方式保护您的隐私是以每次访问时必须下载页面上的每个资源为代价的。如果您曾经缓存任何内容,那么您将存储可以从您的请求推断到服务器的信息。

特别是在移动设备上,您的带宽更贵且速度更慢,每次访问时下载所有页面资源都是不切实际的。我认为在某种程度上你必须接受你与网站的交互中存在的模式,这些模式可以被检测和分析以识别你。