引言
浙江温州最大皮革厂江南皮革厂倒闭了!我们没有办法,拿着钱包抵工资!原价都是100多、200多、300多的钱包,统统20块!回复 T 退订。
经过与垃圾短信多年的斗智斗勇,我们现在对上面那种信息已经见怪不怪了。而且我们都知道,收到这种短信,不管是发送「T」还是「复 T」都不能让江南皮革厂更快倒闭;相反,回复行为相当于告诉对方这是一个真实有效的手机号,从而变本加厉地给你发送广告。对于这种垃圾信息,最省事的方法是直接拉进黑名单,一了百了。
其实,在垃圾信息的另一个重灾区——电子邮件中,类似的手法也是很普遍的。推广邮件的发送者往往都是通过向第三方批量购买邮件列表获知我们的邮箱地址的,他们很难事先知道买来的列表中到底有多少地址真实有效。因此,追踪发出的推广信息是否被打开、被怎样的用户打开,是其迫切的需求。
「幸运」的是,电子邮件无论在功能还是容量上都比短信丰富得多,推广邮件的发件人不依靠「回复 T 退订」这种文字游戏,也有五花八门的方法可以追踪用户的信息。下文中,我们将介绍其中两种常见的追踪手法及其应对策略,并通过演示进一步加深实际感受。
手法一:利用「隐形图片」追踪邮件阅读情况
1. 原理
我们知道,电子邮件按照其内容格式,可以分为纯文本邮件和富文本邮件两种,目前用得最普遍的是后者。打开一封富文本邮件和打开一个网页并没有什么区别——它们都是使用 HTML 来标记的,也都支持嵌入各种媒体文件。因此,只要在电子邮件中引用一张位于远程服务器上的图片,邮件客户端就会在打开邮件时向该服务器发起下载图片的请求。于是,服务器的控制者只要查看请求记录,也就间接知道了邮件是否、何时被打开,收件人使用了什么客户端,IP 地址是什么等信息。
这正是很多推广邮件用于追踪阅读情况的手法。原则上,在邮件中嵌入任意远程内容,都可以实现追踪效果;但实践中用的更多的做法是在邮件末尾插入一张 1*1 像素的纯白色/透明图片,因为这对邮件内容的影响最小,也最不容易引起收件人的注意。
2. 防范
那么,如何应对这种追踪方式呢?很显然,这种手法的关键点在于客户端从远程服务器上下载那张隐形图片,因此只要阻止这一请求的发生就可以了。需要说明的是,很多客户端出于用户体验考虑,都会预先加载未读邮件的内容,以减少用户的等待时间。因此,即使不打开邮件,也可能在不经意间载入这些追踪图片。
好在,绝大多数的邮件客户端都会禁止被判定为推广内容的邮件自动载入图片等远程资源。但是,客户端的筛查机制并非百发百中;如果想彻底防御这种追踪,可以设置对所有邮件关闭加载远程资源功能。几乎所有的客户端都提供了这一选项。例如,Mac 的原生邮件 app 用户可以打开 邮件> 偏好设置,在 查看选项卡中取消勾选 加载信息中的远程内容。iOS 的原生邮件客户端则可以关闭 设置> 邮件中的 加载远程图片开关。
另外,用一个独立的邮箱来注册网上的各种服务并集中收取推广邮件也有利于对抗这种追踪。这是因为,Gmail、Outlook 这些较为优秀的邮箱服务不仅能更有效地过滤出垃圾邮件,从而自动阻止加载其中的追踪代码,而且还会对邮件中的各类链接进行处理,用其自己的服务器代理获取其内容并进行安全检查。这样,即便加载了这些追踪图片,你的 IP 地址等隐私信息也不会被暴露给发件方。
3. 演示
为了加深对这种手法的体会,我们不妨通过实验来说明其实现机制。提供邮件追踪的服务有很多,这里以 GetNotify为例。注册账号后,在任何客户端中用该注册邮箱发信时,只要在收件人的邮箱地址后加上 .getnotify.com
,GetNotify 就会在你的邮件末尾嵌入一张隐形图片,并开始追踪其阅读状态。
例如,如果你想追踪发送给 mike@hotmail.com
这一地址的邮件,只需将收件人填写为 mike@hotmail.com.getnotify.com
。这一操作对收件人是透明的,即对方在邮件中仍然只会看到自己的地址。
我们通过 GetNotify 给自己的另一邮箱发送一封测试邮件,并在收到后打开阅读。很快,发件邮箱就收到了 GetNotify 发出的已读通知。告知其被阅读的时间、客户端的类型和 IP 地址等信息。事实上,这封邮件每被阅读一次,都会被记录在案并向你通知(默认通知前三次,最多可以设置为前 50 次)。
此外,还可以在网页端的 Outbox页面查看每封通过 GetNotify 追踪邮件的被阅读详情。
下面我们检查一下经过 GetNotify 处理的电子邮件,看看它是否符合前面说明的原理。打开这封测试邮件的源码,可以看到末尾处被插入了一段代码,其内容正是引用一张尺寸为 1*1 像素的远程图片。
我们将其中提到的图片地址复制出来,在浏览器中手工访问。很快,GetNotify 的后台就反映出这封邮件再一次被「阅读」了。这就印证了 GetNotify 的追踪方式正如前文所述。
手法二:通过邮件中的跳转链接记录用户信息
1. 原理
另一种实现追踪的方式是通过邮件中的链接。当用户点击链接时,其访问时间、IP 地址等信息就会暴露给发件方,从而为其后续发送邮件或定制推广内容提供线索。
可能有读者会问,邮件中的链接指向的地址未必都是由发件人管理的,对方如何知道用户是否访问了一个第三方的地址呢?
其实,只要右键复制链接地址检查一下就能发现,推广邮件中的链接地址几乎都不是浏览器最终打开的页面地址,而是一个冗长、不可读的「跳转地址」。这种链接的原理和我们常用的「短链接」如出一辙,都是利用了 HTTP 协议中的重定向功能。当用户访问这种链接时,浏览器会收到一个值为 301 (Moved Permanently)
或 302 (Move Temporarily)
的 HTTP 状态码,并在响应的 Location
字段获知真正应当访问的地址。
这就好比你根据邮件中留下的「地址」去敲门,结果被告知要找的人已经搬走了(301
)或者暂时外出(302
),应该去另一个地方(Location
)找。而正是中间这番波折,让发件方得以获知你的访问情况。
2. 防范
很显然,与嵌入图片这种「全自动」的追踪方法相比,跳转链接有一个天生缺陷——它需要用户手动操作。但实践中,很多用户出于随意和好奇,经常轻易点击邮件中具有诱导性的链接;因此,这种方法很多时候反而比容易遭到屏蔽的追踪图片更加有效。
更应当指出的是,除了隐私方面的担忧,这种跳转链接还存在很高的安全风险,因为它「掩盖」了真实的链接地址。经验丰富的用户都知道,观察链接地址本身就足以让我们获取很多信息。例如,如果收到一封看似来自苹果的邮件,告知你 Apple ID 的安全风险并要求重置密码,但其中的链接指向的却不是 apple.com
,而是 appleid.cc
之类的冒牌域名,那么很显然是不值得信任的,应当忽略这封邮件并直接拉黑删除。但是,如果邮件中嵌入的是跳转地址,那么只有点击后才能知道它到底指向何方,而或许它指向的正是一个含有恶意代码的网址。
显然,对于邮件中的跳转链接,最简单但也是最有效的防范方式就是保持警惕,不要轻易点击任何不明来源的推广邮件中的链接。目前,很多邮件服务商都提供了链接地址安全性检测的功能,会自动检查并标记内嵌链接的安全等级,帮助用户进行判断。像 Outlook 这样的服务,还会在外部链接上再「套接」一层自己的跳转链接,在点击链接时先帮用户「试毒」。结合这些辅助机制,就能在较大程度上防止误点恶意链接。
此外,进阶用户还可以通过 HTTP 请求中的 HEAD
方法,在不真正访问链接内容的前提下获取跳转链接的真正地址。在终端中运行:
$ curl -I 链接地址
响应中的 Location
字段就是跳转链接真正指向的地址,接着就可以通过观察该真实 URL 决定是否打开。(经过测试可以发现,curl -I
操作本身不会被 MailChimp 或 bit.ly 的跳转链接追踪并记录。)另外,iOS 用户可以通过 OpenTerm这款免费 app 在移动端运行 curl
命令,或使用网页版工具。
3. 演示
我们还是通过实验来感受一下这一手法的效果。目前,相当多数的推广邮件是通过 MailChimp这一平台发送的。(需要指出的是,不要把 MailChimp 和垃圾邮件挂钩;相反,这是一个用户体验设计非常优秀的服务,很多独立内容创作者的 Newsletter 都是通过该平台发送的。)我们注册账号,创建一封测试邮件并发送,然后在收件邮箱中打开并尝试点击其中的链接。
这时,通过网络调试工具查看点击链接后发生的网络请求,可以看到该地址返回了一个 302
重定向,随后浏览器开始访问真正的地址。
与此同时,MailChimp 的后台中已经反映出邮件及其中链接的打开情况。
总结
以上就是推广邮件追踪用户阅读状况和其他信息的两种常见手法。它们的原理都不复杂,但都较为隐蔽,利用的是用户的疏忽大意,因此比较容易得手。我们针对两种方式分别给出了应对方法,可以看出,除了必要的谨慎态度和技术措施,选用靠谱的邮件服务、培养良好的邮箱使用习惯,同样是对抗邮件追踪的重要途径。
另外,在非自愿收到推广邮件后,不应直接删除了事,而要根据不同情形采取对应措施,防止继续收到类似邮件。如果该推广邮件是来自于 MailChimp 等较为知名的群发平台(可以通过检查邮件中链接的 URL 来判断,如 MailChimp 发出邮件的跳转链接域名为 list-manage.com
),那么可以直接点击邮件末尾的 Unsubscribe链接来退订。这些公司受到美国的 CAN-SPAM 法案规制,其提供的退订链接必须是明示、有效的,因此可以确保退订后不再被打扰。
相反,如果推广邮件并非来自这些规范平台,或是广告商自行炮制的,那么点击其中的退订链接可能未必有效,反而会起到暴露邮箱有效性的相反效果。对于这种地址,直接标记为垃圾邮件并加入黑名单可能是更有效的应对方式。