现在很多网站提供了链接图片并预览的功能,但是这可能会泄露某些信息给那些图片提供者。而如果图片提供者是帖子的发布者,那么 ta 就可能会达成某种目的。
现在很多邮件会自动加载外链图片,这可以用来判断你是否打开了这个邮件。如果别人有某种目的,发个邮件就可能获取你的 IP 。
本文做了一下总结,没有参考其他文章,仅仅根据自身知识总结。所以可能会有所错误。
以下均为最坏的情况
网站加载图片时直接发送请求到图片地址,那么图片提供者就可以获取加载这个图片的用户 IP ,如果使用了分流规则,那这个 IP 可能是你的真实 IP (国内地址直连),或者代理 IP 。
图片提供者还可以获取加载图片的页面的域名。如用户通过 https://abc.example.com/e.html 加载了一个图片 A ,那么默认情况下,图片 A 的提供者可以知道某用户通过 abc.example.com 查看了图片。这个是通过 img 的 referrerPolicy 属性来控制的。
还有 各种请求头信息:User-Agent 、Accept-Language
访问就会发送请求,访问时间是一个很重要的信息
以下方法代价由高到低
针对用户外链的图片,可以在发帖时就缓存到服务器,然后改变原链接地址,类似于用户上传图片。
这种方法是隐私性最好的,但是当外链的图片变化时不能及时感知。 优点:
缺点:
解决方法有很多,可以看看 GitHub 是怎么解决的。( GitHub 最近更新了生成的 URL )
针对用户直接通过浏览器上传图片的场景。Github 会生成一个 https://github.com/{{owner}}/{{repo}}/assets/{{uuid4}}
的链接,然后通过 302 跳转到github-production-user-asset*****.amazonaws.com/******
实际图片地址,这种情况显然除了 GitHub 谁也得不到访问者的地址和 referrer ,是安全的。
通过外链链接图片 Github 支持 MarkDown ,可以填图片外链。这种情况 Github 会使用https://camo.githubusercontent.com
这个域名代理用户图片,然后加载。这种情况显然也是安全的。
方法 2 其实很久前开源了一个项目https://github.com/atmos/camo.git 不过后来没有维护了
GitHub 的方法隐私性中等,不过不会有前一种方法图片更新导致的问题,而且不用存储图片。 优点:
缺点:
上面的方法都要求服务端处理,要消耗较多的资源
可以限制图片提供者,也就是只允许加载指定域名的图片。
这种情况下,只有指定的图片提供者可以获取用户信息,但是图片提供者也可能会提供一些信息给上传图片的发布者,如浏览量等,所以域名要谨慎选择。
PS:v 站在用户评论上采用了这个方案。
见MDN referrerPolicy 默认情况下是 strict-origin-when-cross-origin (详细解释见文档)会发送页面域名给图片提供者。 设置为 no-referrer 就不会发送域名数据。
PS:v 站在用户评论和帖子外链上采用了这个方案。
针对一些特殊网站,可以考虑默认不加载图片。
针对邮件,关闭邮件外链图片的自动加载功能
利用图片自动加载的特性也不是什么新鲜玩意,有些邮件追踪就是用图片自动加载来实现的,而追踪的目的很可能是是否点开了这个邮件。这样一来那些部分邮件客户端提供的代理图片功能就用处不大了(除非是用的上面说的立即缓存方案)。
当然代理图片可以隐藏客户端的 IP 和 Header 等信息,也算是一种折衷。
部分网站使用这种功能。
当然了,在座的各位一个都跑不掉。
1
j20001112 2023-05-20 12:34:06 +08:00 via iPhone
iCloud private rely 在 safari 和邮件中就是防止这种现象,Mac 也只能让网站知道大概的设备数据,没办法浏览器设备指纹。像亚马逊封号用 Chrome 创建新号很容易就被追踪到连带封了,而 Mac 的 safari 就不会
|
2
oldshensheep OP 看了有些是 RSS 加载的,有些是 BOT ,好像 HK 的比较多,手机是 IPhone 的比较多
感觉可以用来做网站流量分析了…… |
3
oldshensheep OP 后端的只存了原始数据,手动看比较麻烦,有时间写个统计程序。
|
4
beijinglowb 2023-05-20 13:10:41 +08:00 via iPhone
找可靠些的图床,别用那种私人的
|
5
oldshensheep OP @beijinglowb
好的,在座的信息我都记录下来了 |
6
SunsetShimmer 2023-05-20 13:24:30 +08:00
|
7
oldshensheep OP @SunsetShimmer 用的 workers+D1 ,就是那个 sqlite 数据库,还处于 Alpha 阶段
|
8
butanediol2d 2023-05-20 14:05:55 +08:00
现在大部分的邮箱客户端都默认不会自动加载外链资源吧
|
9
gam2046 2023-05-20 15:20:09 +08:00 1
@butanediol2d #8 也不单看客户端行为,有些邮件服务商,比如 Gmail ,会直接保存一份,替换掉邮件中的图片地址。邮件,你别看支持 HTML ,但是支持的程度非常有限,每个服务商都有自己的规则,所以现在许多垃圾邮件索性直接就发一个大图了。
|
10
lisxour 2023-05-20 15:35:28 +08:00 1
你说的不就是十几年前 QQ 空间玩烂的东西嘛。。。
签名挂一张图片,可以显示访问者物理地址、IP 地址、浏览器信息,访问者数量这些信息。。。 |
11
lisxour 2023-05-20 15:39:49 +08:00
@lisxour 现在这种应用也很常见,基本上只要能挂外链图片签名的各种论坛你都能看见有显示 ip 、浏览器信息的这种签名,就连现在的很多站长工具也有这种图片链接类型的统计。
|
12
xuangoer666 2023-05-20 15:46:27 +08:00 via Android
|
13
oldshensheep OP @lisxour 对,不过现在 QQ 空间不行了吧(不玩 QQ 空间了,不太清楚),但是现在还有很多网站存在这个问题。
|
14
oldshensheep OP @xuangoer666 可能是没走代理,被墙了
|
15
terence4444 2023-05-20 16:02:58 +08:00 via iPhone 2
我一直在用 Firefox 和 插件 Matrix ,跨域名请求可以清楚地看见。默认阻挡。
虽然稍有不便但我觉得值得 |
16
oldshensheep OP @terence4444 这个插件的确很不错,可以根据域名是否是第三方的分别 Block ,CSS ,Image ,Script 等外链
|
17
20160409 2023-05-21 14:44:06 +08:00
编程随想的博客里提到过,有拿 1 像素的图片去钓 IP 的
|