技术知识库

HSTS 是啥

缘起: HTTPS 也不安全

有不少网站只通过 HTTPS 对外提供服务,但用户在访问某个网站的时候,在浏览器里却往往直接输入网站域名(例如: www.landui.com),而不是输入完整的URL(例如https://www.landui.com),不过浏览器依然能正确的使用 HTTPS 发起请求。这背后多亏了服务器和浏览器的协作,如下图所示。

image.png

简单来讲就是,浏览器向网站发起一次 HTTP 请求,在得到一个重定向响应后,发起一次 HTTPS 请求并得到最终的响应内容。所有的这一切对用户而言是完全透明的,所以在用户眼里看来,在浏览器里直接输入域名却依然可以用 HTTPS 协议和网站进行安全的通信,是个不错的用户体验。

一切看上去都是那么的完美,但其实不然,由于在建立起 HTTPS 连接之前存在一次明文的 HTTP 请求和重定向(上图中的第1、2步),使得攻击者可以以中间人的方式劫持这次请求,从而进行后续的攻击,例如窃听数据,篡改请求和响应,跳转到钓鱼网站等。

以劫持请求并跳转到钓鱼网站为例,其大致做法如下图所示:

image.png

  • 第1步:浏览器发起一次明文HTTP请求,但实际上会被攻击者拦截下来

  • 第2步:攻击者作为代理,把当前请求转发给钓鱼网站

  • 第3步:钓鱼网站返回假冒的网页内容

  • 第4步:攻击者把假冒的网页内容返回给浏览器

这个攻击的精妙之处在于,攻击者直接劫持了HTTP请求,并返回了内容给浏览器,根本不给浏览器同真实网站建立HTTPS连接的机会,因此浏览器会误以为真实网站通过HTTP对外提供服务,自然也就不会向用户报告当前的连接不安全。于是乎攻击者几乎可以神不知鬼不觉的对请求和响应动手脚。

提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: