前言
其实感觉现在说这个太out了,我看网上最早的文章是从2017年就开始说这个,至于为啥我现在来说?因为我也是才知道啊,毕竟,Safari对我来说只是个摆设,我的主力浏览器一直是chrome~。
我也是最近无意中在知乎刷到这个,因为偶尔我也会用Safari来测试,感觉和我也不是完全没有一点关系,所以才花时间研究了一下,看看这么久过去了情况有没有什么变化,随便水一篇文章。
何为"欺骗性网站警告"?
先看看国行ios上关于"欺骗性网站警告"的说明:
再看看macos上关于"欺骗性网站警告"的说明:
简单来说,就是苹果为了用户的安全,在用户使用其Safari浏览器浏览网址的时候,会使用外部安全机构提供的数据库来验证用户所访问网址是否安全,如果验证的结果是不安全,则Safari浏览器会阻止该网址的加载并提示"欺诈性网站警告":
当然,用户可以自行选择继续点击"访问此不安全的网站"(不过我也有看到说点击访问也不行,必须关掉"欺诈性网站警告"功能才能的),但是,我相信大部分人会选择不再继续访问,这是出于对苹果的信任。
问题点在哪?
以前外部安全机构都是"谷歌安全浏览",但是从2019年9月(或者10月)开始,"中国大陆"被单独拿出来(现在则变成了"中国大陆"或"香港"),由"腾讯安全浏览"负责。
相信大家都清楚腾讯的习惯(微信发网址,用微信内置浏览器经常打不开,说被举报异常;qq发消息,正常的网址可能也会被标红~,但是电脑浏览器却能正常打开),再加上这句话:谷歌(对于地区设为“中国大陆”或“香港”的用户而言,则为腾讯)也可能会在收到相关信息时记录你的IP地址,这就吓到了不少人,因为的确有人之前用Safari浏览器能正常访问的、自己知道没问题的网址,在这之后出现了被"欺诈性网站警告"阻断访问的事,所以造成大家纷纷关闭了"欺诈性网站警告"这个功能。
"欺诈性网站警告"实现原理
问题:Safari浏览器和外部安全机构之间是如何验证用户访问的网址是否是安全的?难道Safari浏览器会直接把用户访问的url和IP地址发给外部安全机构?
查了一下,貌似早期的时候(只有"谷歌安全浏览"时)还真是这样,那个时候谷歌就是提供的一个API,浏览器会直接将用户的URL发给谷歌提供的API进行查询,所以那段时期,谷歌还真是能够获得用户访问的完整URL以及用户的IP地址,这个API现在依然存在,叫Lookup API:
为了解决这些问题,谷歌很快提出了一种更安全的 "安全浏览 "方法。这种新方法被称为 "更新 API",它是这样工作的:
1、谷歌首先计算数据库中每个不安全 URL 的 SHA256 哈希值,然后将每个哈希值截断为 32 位前缀,以节省空间。
2、谷歌将截断哈希值数据库发送到你的浏览器。
3、每次访问 URL 时,浏览器都会对其进行散列,并检查其 32 位前缀是否包含在本地数据库中。
4、如果在浏览器的本地副本中找到该前缀,浏览器就会将该前缀发送到 Google 服务器,后者会发回匹配 URL 的所有完整 256 位哈希值列表,这样浏览器就可以检查是否完全匹配。
在每次请求时,谷歌服务器都会看到用户的 IP 地址以及数据库状态等其他识别信息。
毋庸置疑,Lookup API 是隐私的灾难,而 "更新 API "的隐私性要好得多:原则上,谷歌应该只知道一些浏览请求的 32 位哈希值。此外,这些被截断的 32 位哈希值不会精确地揭示你正在访问的 URL 地址,因为在这么短的标识符中可能会有很多碰撞,这就提供了一种匿名形式。
这种方法的缺点是只能提供部分隐私:一般用户不会只访问一个 URL,他们会在一段时间内浏览成千上万个 URL。这意味着提供商如果要想消除用户的匿名性,需要收集更多该用户访问的URL信息。如果用户浏览了许多相关网站,就会逐渐向提供商泄露其浏览历史的详细信息,而这时如果提供商是愿意,其实是可以将这些请求联系起来推算出用户访问了哪些网站。
虽然上面只提到了谷歌,但是估计腾讯应该也会采用一样的方式,所以用户是否信任Safari浏览器在浏览网址的时候发出的"欺诈性网站警告",就要看这个用户是否信任"安全浏览"的提供商了。
"欺诈性网站警告"选项打开的影响
其实在腾讯刚接手的时候,应该还没有啥轻重,习惯性的把很多"自己定义"的不良网站加入了"欺诈性网站"的名单中,导致了很多区域是中国大陆的用户在使用Safari访问自己习惯访问的网站时被"警告":
虽然不知道上图中他们谈论的是啥站,但是这样肯定会大大的影响苹果的形象,所以我估计后面肯定经过了交涉,腾讯应该提供给苹果的"安全浏览"库和国内微信、qq上使用的有了相当大的差别,不会再动不动就出现"欺诈性网站警告"了。
该不该关闭"欺诈性网站警告"?
前面说了那么多,结论是啥?到底该不该关闭"欺诈性网站警告"这个功能呢?
讲道理,腾讯虽然肯定会有些小动作,比如在"安全浏览"库中加些佐料,但是,它的"安全浏览"库中肯定绝大部分有问题的网址的内容还是真的,完全关掉也有点浪费,那么我们分情况来讨论:
1、如果你本身就比较专业,懂得很多,很有把握经常访问的网站都没有问题,更不会去访问有问题的网站,那么其实可以关掉,因为懂得多,顾虑也多。
2、如果你对这方面不太懂,无法分辨哪些网站有问题、哪些网站没问题,而你也不会去访问不该访问的网站,那么完全可以打开。
3、如果你又想享受平时的"欺诈网站警告",有时候又想访问一些不可言说的网站,而你还担心被记录(虽然可能性很低),那么只要你精力好,完全可以平时打开,而需要时关闭,不需要时又打开。
4、其实还有一种,就是我这样正直的人,完全问心无愧,会保持打开!
另:前面只是为了截图临时关闭,现在都打开了!
这让我想到有一些浏览器有检测你使用的密码有没有被泄露的功能 – have i been pwned?。采用的也是类似机制,浏览器想知道你的密码明文是轻松的,但是处于安全考虑不能这么做。先将你的密码进行hash,截取hash值的一部分,将这部分发送给浏览器官方,因为收到的是hash值且一部分,所以浏览器官方不可能知道你的密码具体是多少,然后在已泄露的密码数据库里找到匹配这部分hash的数据,将其返回给用户,用户端再将其密码与这部分返回的数据进行比对,如果在返回的数据里有相同的,那么意味着用户的密码在已泄露的数据库里,表面用户使用的是弱密码或者密码已经被泄露。
之前在某个博客里了解到的,但是怎么到找不到原文了,这个机制还有个名词叫做 “k-匿名性”。