网站知道我以前访问过哪个网站吗?

信息安全 网页浏览器 http
2021-08-22 04:04:46

假设我正在使用网络浏览器查看example.com. 现在,从同一个 Web 浏览器选项卡中,我example.org在地址栏中输入并转到由另一个实体运营的完全不同的网站。

example.org知道我以前使用的网站是example.com

我知道example.org可以查看 HTTPReferer标头以知道我来自example.com如果我单击链接example.com以达到example.org. 如果我在地址栏中手动输入地址怎么办?example.org知道我以前来自哪个网站吗?

4个回答

网站知道我以前访问过哪个网站吗?

没有对浏览器历史的直接跨站点访问。但是有一些方法可以“探测”历史,从而检测以前对特定页面或站点的访问。对用户浏览器历史进行这种跨站点检测的技术在术语“历史嗅探”下是已知的。除此之外,使用跨站点跟踪器和广告网络(谷歌分析和其他)提供基于用户历史的用户跨站点分析。

历史嗅探基本上是通过在包含来自其他站点的知名资源时观察副作用(通常是时间差异)来工作的。通过这种方式,可以检测用户之前是否访问过站点或特定页面,因为如果资源是从浏览器缓存中加载的(即页面已经访问过),或者服务器处理在浏览器是否发送 cookie(即是否访问过网站)。通过使用纯 HTTP 包含来自启用 HSTS 的站点的资源,从而检查浏览器是否已经知道启用了 HSTS 并因此直接使用 HTTPS 访问该站点,可以观察到类似的差异。

在过去的几年里,历史嗅探变得更加困难,至少有一些浏览器更加关注保护隐私和限制与历史相关存储数据(缓存、cookie 等)的跨站点交互,即使以牺牲一些性能为代价(即不从缓存跨站点加载数据)。但这仍然是可能的。

要获取有关旧技术的一些链接,请参阅浏览器缓存信息披露或解决方法:本网站上的已访问 CSS 历史记录。这方面的一些较新的论文是Cookies from the Past: Timing Server-side Request Processing Code for History Sniffing from 2020 和Browser history re:visited from 2018。

网站是否有一个简单的机制来做到这一点?,可以这样做吗?绝对没错。

大多数广告网络都使用这种类型的功能。他们的广告脚本在世界各地的许多网站上运行,因此他们知道您去过哪里,并且可以根据之前的访问为您提供广告。截至 2016 年,谷歌分析可能是该领域最严重的违规者。谷歌广告和分析可以在大多数英文网站上找到,谷歌使用这些信息来跟踪你在互联网上的路径。

我认为 Steffan Ulrich 的回答在技术上是正确的。但是,如果 OP 的问题是由不精通的用户提出的,我想我会以不同的方式回答。

难道所有的网站知道了走访其以前的网站?可能并非没有一些与特定先前站点测试相关的技术体操。

难道一些网站知道了走访其以前的网站?可悲的是(合格的)是的。例如,Facebook 知道您每次访问包含 Facebook“赞”按钮的网站。因此,当您访问 Facebook 时,他们可以向您展示 Herkimer Battle Jitney 的广告,您刚刚在一个完全不同的网站上查看。任何有足够影响力的公司在数以百万计的网站上都有他们的广告或链接或其他任何东西,情况也是如此。N-ate 的 Google 示例也是一个很好的例子。

并非没有创造性的聪明

这是一个例子。我有一个记录标头的简单静态网络服务器。我有index.htmltest.html这是我一个接一个手动输入时的浏览器请求:

索引.html:

GET /index.html HTTP/1.1
Host: localhost
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="96", "Google Chrome";v="96"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36      
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9

测试.html:

GET /test.html HTTP/1.1
Host: localhost
Connection: keep-alive
sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="96", "Google Chrome";v="96"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36      
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9

这是我单击 index.html -> test.html 上的链接时的数据

GET /test.html HTTP/1.1
Host: localhost
Connection: keep-alive
sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="96", "Google Chrome";v="96"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36      
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Referer: http://localhost/index.html
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
If-None-Match: W/"14d-17d2a478c97"
If-Modified-Since: Tue, 16 Nov 2021 19:44:31 GMT

最重要的是,Referer[原文如此] 仅在您导航时发送。另一方面,在浏览器(本例中为 Chrome)中手动输入 URL 会创建一个新请求。

最后,我将尝试检查 javascript 对象以识别同一站点和跨站点示例上的历史记录等,但除了 Referer 及其依赖方法之外,似乎没有任何内置方法可以查询。

虽然这是预期结果,但并非所有浏览器代理都相同。 如果您希望获得隐私,请使用最新的现代浏览器代理。

最后,如果example.com并且example.org正在协调和共享数据,他们可以高度自信地确定您访问了这两个位置。此外,如果它们都嵌入了第 3 方组件,则第 3 方可以识别您在两个位置之间的浏览。即使他们嵌入了单独的第 3 方组件,但第 3 方彼此共享数据,他们也可以执行跟踪。