http - 这会保护我免受 Etag 跟踪吗?

标签 http tracking privacy etag cookieless

背景:ETag 跟踪得到了很好的解释 here并且在 Wikipedia 上也提到了.

answer我在对“如何防止 ETag 跟踪?”的回复中写道。促使我写下这个问题。

我有一个浏览器端解决方案可以防止 ETag 跟踪。它在不修改当前 HTTP 协议(protocol)的情况下工作。 这是 ETag 跟踪的可行解决方案吗?

不是告诉服务器我们的 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

情况一,Client有一个相同的ETag:

Connection closes, client loads page from cache.

情况 2,客户端有不匹配的 ETag:

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

需要修改 HTTP 规范的额外内容

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

<强>1。移除 HEAD 开销

值得注意的是,这里有一个小的开销,服务器必须两次发送 HTTP header :一次响应 HEAD,一次响应 GET。一个理论上的解决方法是修改 HTTP 协议(protocol)并添加一个请求无 header 内容的新方法。然后,如果 ETag 不匹配,客户端将仅请求 HEAD,然后仅请求内容。

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

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

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

最佳答案

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

关于http - 这会保护我免受 Etag 跟踪吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20335365/

相关文章:

http - 除了HTTP还有其他常见的协议(protocol)吗?

html - 编写嵌入式 Web 服务器时如何正确构建 favicon.ico 响应

asp.net - 共享 http 和 https 版本的 session 变量

ios - 您如何在 iOS 中第二次请求照片库权限

ios - 如何以编程方式在 iPhone 上启用引导访问(Kiosk 模式)?

facebook - 如何通过图形 API 更改发布在 Facebook 上的照片的隐私设置

php - 在 PHP 4 中复制通过 PHP 的 HTTP Get 上传的文件

android - Google Analytic for mobile app 显示没有响应虽然获得 http 200

javascript - 在 JavaScript 中隐藏/欺骗引荐来源网址的最可靠方法是什么?

javascript - 如何设置 facebook 像素 "submit button"跟踪