https并没有解决劫持的问题
每次一提到防劫持,大家给出的终极方案总是https。但是https 真的可以完美解决运营商劫持的问题么?也许从安全的角度考虑,https确实是最佳解决方案。但是从产品角度从用户体验上来考虑呢?使用https 不但没有解决问题,甚至会变得比从前的http更糟糕。
自从某项目上了https后老有用户反馈说页面打不开。以前使用http的时候虽然有劫持,偶尔还会被插入一些恶心的广告,但页面总是可以打开,功能可以正常使用。现在上了https反而各种白屏,各种连接建立失败。虽然广告看不见了,但连功能也无法使用了。
很多时候网页上并不存在敏感信息,传输没有安全的必要,产品设计上只是为了让用户看到这个页面,所以即使被插入广告也比白屏好。对于这类页面,使用https可能适得其反。
但是即便是纯展示的页面也是有安全风险的。比如一个宣传页,如果使用http,攻击者可以篡改页面上的二维码或下载链接,让用户下载到奇奇怪怪的东西,或者链进一个钓鱼网页。虽然比起 SessionID泄露之类的风险要低得多,但这依然是一种风险。
Web页面的运营商劫持问题目前就技术层面我也没想到什么解决方案,如果大家有什么方案可以一起聊一聊。但如果是App内部就可以解决。因为我们可以基于传输层协议自己封装一个运营商不知道的域名解析协议,并且自己搭建相应的DNS服务器。只要不是被针对性地攻击就可以免受劫持。
另外,比起白屏和被植入广告,我更愿意选择白屏(虽然产品经理不会这么想)。但是作为Web开发者,推进全面https才是我们该做的。如果全世界都https了,运营商自然也就不会去做劫持这种费力不讨好的事情。