开启HSTS让浏览器强制跳转HTTPS访问
《开启HSTS让浏览器强制跳转HTTPS访问》要点: 在网站全站HTTPS后,如果用户手动敲入网站的HTTP地址,或者从其它地方点击了网站的HTTP链接,通常依赖于服务端301/302跳转才能使用HTTPS服务.而第一次的HTTP请求就有可能被劫持,导致请求无法到达服务器,从而构成HTTPS降级劫持.这个问题目前可以通过HSTS(HTTP Strict Transport Security,RFC6797)来解决. HSTS简介HSTS(HTTP Strict Transport Security)是国际互联网工程组织IETF发布的一种互联网安全策略机制.采用HSTS策略的网站将保证浏览器始终连接到该网站的HTTPS加密版本,不需要用户手动在URL地址栏中输入加密地址,以减少会话劫持风险. HSTS响应头格式
HSTS Preload List虽然HSTS可以很好的解决HTTPS降级攻击,但是对于HSTS生效前的首次HTTP请求,依然无法避免被劫持.浏览器厂商们为了解决这个问题,提出了 目前这个Preload List由Google Chrome维护,Chrome、Firefox、Safari、IE 11和Microsoft Edge都在使用.如果要想把自己的域名加进这个列表,首先需要满足以下条件:
即便满足了上述所有条件,也不一定能进入 通过Chrome的 HSTS缺点HSTS并不是HTTP会话劫持的完美解决方案.用户首次访问某网站是不受HSTS保护的.这是因为首次访问时,浏览器还未收到HSTS,所以仍有可能通过明文HTTP来访问. 如果用户通过HTTP访问HSTS保护的网站时,以下几种情况存在降级劫持可能:
解决这个问题目前有两种方案: 方案一:在浏览器预置HSTS域名列表,就是上面提到的 方案二:将HSTS信息加入到域名系统记录中.但这需要保证DNS的安全性,也就是需要部署域名系统安全扩展. 其它可能存在的问题 由于HSTS会在一定时间后失效(有效期由max-age指定),所以浏览器是否强制HSTS策略取决于当前系统时间.大部分操作系统经常通过网络时间协议更新系统时间,如Ubuntu每次连接网络时,OS X Lion每隔9分钟会自动连接时间服务器.攻击者可以通过伪造NTP信息,设置错误时间来绕过HSTS. 解决方法是认证NTP信息,或者禁止NTP大幅度增减时间.比如:Windows 8每7天更新一次时间,并且要求每次NTP设置的时间与当前时间不得超过15小时. 支持HSTS浏览器目前主流浏览器都已经支持HSTS特性,具体可参考下面列表:
HSTS部署服务器开启HSTS的方法是:当客户端通过HTTPS发出请求时,在服务器返回的超文本传输协议响应头中包含 最佳的部署方案是部署在离用户最近的位置,例如:架构有前端反向代理和后端Web服务器,在前端代理处配置HSTS是最好的,否则就需要在Web服务器层配置HSTS.如果Web服务器不明确支持HSTS,可以通过增加响应头的机制.如果其他方法都失败了,可以在应用程序层增加HSTS. HSTS启用比较简单,只需在相应头中加上如下信息:
HSTS策略只能在HTTPS响应中进行设置,网站必须使用默认的443端口;必须使用域名,不能是IP.因此需要把HTTP重定向到HTTPS,如果明文响应中允许设置HSTS头,中间人攻击者就可以通过在普通站点中注入HSTS信息来执行DoS攻击. Apache上启用HSTS
(编辑:ASP站长网) |