未来,HSTS使网站更安全。有不少网站只通过HTTPS对外提供服务,但用户在访问某个网站的时候,在浏览器里却往往直接输入网站域名而不是输入完整的URL,不过浏览器依然能正确的使用HTTPS发起请求。这背后多亏了服务器和浏览器的协作。既然建立HTTPS连接之前的这一次HTTP明文请求和重定向有可能被攻击者劫持,那么解决这一问题的思路自然就变成了如何避免出现这样的HTTP请求。我们期望的浏览器行为是,当用户让浏览器发起HTTP请求的时候,浏览器将其转换为HTTPS请求,直接略过上述的HTTP请求和重定向,从而使得中间人攻击失效,规避风险。
HSTS不仅会告知浏览器自动请求HTTPS页面(即使用户在浏览器地址栏中输入的是http),还会告知搜索引擎及搜索结果中提供安全网址,从而最大限度地降低了向用户提供不安全内容的风险。要支持HSTS,请使用支持HSTS的网络服务器并启用该功能。
虽然HSTS更安全,但它会增加回滚策略的复杂性。我们建议您按照以下方式启用HSTS:
首先,滚动未启用HSTS的HTTPS页面。
开始发送max-age较短的HSTS标头。通过用户和其他客户端监控您的流量,并监控相关内容的效果,如广告。
逐步增加HSTS的max-age。
如果HSTS不会对您的用户和搜索引擎产生负面影响,您便可请求系统将您的网站添加到被大多数主要浏览器使用的HSTS预加载列表中(如果您愿意的话)。
关于HTTPS网站如何支持HSTS可以查看《HSTS安全协议配置启用,从HTTP到HTTPS的安全高效转移》一文。
考虑使用HSTS预加载
如果您启用了HSTS,则可选择支持HSTS预加载,以进一步提高安全性并改善性能。要启用预加载,您必须访问hstspreload.org并按照其中所述的提交要求对您的网站执行相应操作进行配置。
理论上而言,用户看到这个警告之后就应该提高警惕,意识到自己和网站之间的通信不安全,可能被劫持也可能被窃听,如果访问的恰好是银行、金融类网站的话后果更是不堪设想,理应终止后续操作。然而现实很残酷,就我的实际观察来看,有不少用户在遇到这样的警告之后依然选择了继续访问。
不过随着HSTS的出现,事情有了转机。对于启用了浏览器HSTS保护的网站,如果浏览器发现当前连接不安全,它将仅仅警告用户,而不再给用户提供是否继续访问的选择,从而避免后续安全问题的发生。例如,当访问Google搜索引擎的时候,如果当前通信连接存在安全问题,浏览器将会彻底阻止用户继续访问Google。