http://
时,浏览器访问任何站点的默认协议是https://
,但是即使这样,即使我们浏览到说www.facebook.com
的网站,来自Facebook服务器的响应标头也会提到HSTS,并且我们的浏览器会将我们引向http://
到https://
,那么当浏览器本身为用户执行此操作时,为什么我们需要另一个插件来执行此操作?默认情况下,当我们的浏览器运行HTTPS时,HTTPS Everywhere的作用是什么。#1 楼
即使这样,即使我们浏览到一个说www.facebook.com的网站,来自Facebook服务器的响应标头也会提到HSTS
我向
curl
发出了http://www.facebook.com
请求,这就是我得到的:< HTTP/1.1 302 Found
< Location: https://www.facebook.com/
< Content-Type: text/html
< X-FB-Debug: zgK/A+8XSlghi/vWvAivsZ04gawpdr+3BuO7yuQaKDdrP/+B14oSVDSreHh0GbchyNPnav39pQq9Zgw5mSXX5A==
< Date: Sat, 29 Apr 2017 19:23:25 GMT
< Connection: keep-alive
< Content-Length: 0
如您所见,这里没有HSTS标头,因为根据其规范(RFC6797):
HSTS主机不得在通过非安全传输方式传递的HTTP响应中包含STS标头字段。
Web浏览器也将在HTTP响应中忽略HSTS标头:
注意:使用HTTP访问您的站点时,浏览器将忽略Strict-Transport-Security标头。这是因为攻击者可能拦截HTTP连接并注入标头或将其删除。当通过HTTPS访问您的站点而没有证书错误时,浏览器会知道您的站点具有HTTPS功能,并将遵守Strict-Transport-Security标头。
HSTS的目的是告诉您客户端通过HTTPS访问网站后就不要切换到HTTP,反之亦然。来自Wikipedia:
HTTP严格传输安全性(HSTS)是一种Web安全策略机制,可帮助保护网站免受协议降级攻击和cookie劫持。
<协议降级攻击:
降级攻击是对计算机系统或通信协议的一种攻击形式,使其放弃高质量的操作模式(例如,加密连接) ),建议使用旧的,质量较低的操作模式(例如,纯文本),以实现与旧系统的向后兼容性。
因此,HSTS标头不用于重定向与HTTPS的新HTTP连接,但是是为了防止浏览器向现有HTTPS站点发出HTTP请求。
另一方面,HTTPS Everywhere插件可确保Web浏览器与支持HTTPS的网站建立HTTPS连接,但也可以通过HTTP进行访问。
Web上的许多网站仅对通过HTTPS加密,但是使用起来很困难。例如,它们可能默认为未加密的HTTP,或使用返回到未加密站点的链接来填充加密页面。 HTTPS Everywhere扩展通过使用巧妙的技术将对这些站点的请求重写为HTTPS来解决这些问题。
#2 楼
HSTS使用首次使用信任模型。如果您与站点的第一次连接已受到威胁,则后续请求可能不会收到HSTS错误。HTTPS Everywhere会堵塞此漏洞,方法是让浏览器知道该站点是仅HTTPS站点。从第一个连接开始。
另外,即使某些网站支持HTTPS,也不会发布HSTS标头。或者他们的HTTPS可能位于不同的域/路径中(例如
http://www.example.com
但https://secure.example.com
),HTTPS Everywhere试图通过重写站点的URL来帮助解决这些情况。评论
当插件不知道用户正在访问的网站的子域时,如何重写URL?
–吉普赛宇航员
17-4-26在3:44
@GypsyCosmonaut HTTPS Everywhere已与其数据库连接。扩展程序可以重写和重定向URL,添加和删除脚本。这就是为什么您必须小心信任哪个扩展。
– Defalt
17年4月26日在4:24
HSTS预加载也会堵塞对首次使用的信任,但是,如果网站不宣传HSTS,则它不能成为HSTS预加载的候选者。因此,这是HSTS未涵盖的HTTPS Everywhere浏览器扩展所涵盖的另一方面。
–用户
17年4月26日在9:08
作为记录,可以在eff.org/https-everywhere/atlas中浏览HTTPS Everywhere数据库的所有条目。当前在请求之前添加“安全”的示例是eff.org/https-everywhere/atlas/domains/mbl.is.html
– fuglede
17年4月29日在20:14
#3 楼
HTTPS Everywhere是客户端,而HSTS是服务器端。因此,答案是,在服务器未设置HSTS标头的情况下,HTTPS Everywhere可以为您辩护。
评论
我相信HTTPS Everywhere也会尝试升级页面加载的资源(如果它们使用的是http)。
–IllusiveBrian
17年4月26日在0:36
另外,除非您已经通过HTTPS访问站点,否则将忽略HSTS标头。
– Sam Dufel
17-4-26的1:15
要澄清的是,虽然从服务器端设置了HSTS,但要由客户端来尊重它。
– multithr3at3d
17年4月26日在1:41
@SamDufel是的,但这就是在服务器端进行预加载的目的。
–蒂姆
17年4月26日在9:41
@ korockinout13是的,这是正确的。我的回答主要集中在“谁采用了这种防御机制”上,因为我认为这是最相关的。
–蒂姆
17年4月26日在9:43
#4 楼
HSTS由网站运营商酌情决定。他们必须确定强制HTTPS的安全性优势是否值得额外的服务器负载,阻止无法使用HTTPS的用户以及使缓存代理无效。强制HTTPS是HSTS的先决条件。许多站点可选地提供HTTPS,但是通常由最终用户而不是提供链接或URL的人来选择是否使用HTTPS。
HTTPS Everywhere允许用户在此类站点上使用HTTPS,即使链接或键入的URL使用HTTP。
随着越来越多的站点将HTTPS强制并引入HSTS来降低纯文本重定向的安全风险对“ HTTPS无处不在”的需求将会减少,但是直到/除非所有提供HTTPS的站点都这样做,否则它将仍然是一个有用的插件。
#5 楼
问题在于错误的前提。...如果我们浏览到一个说www.facebook.com的网站,则来自Facebook服务器的响应标头将提到HSTS,而我们的浏览器将将我们从
http://
引导到https://
... 不是正确的*。尽管
Strict-Transport-Security
标头是HTTP标头,但是HSTS规范要求服务器仅将其包括在通过加密通道发送的响应中,并且要求客户端在通过非加密通道发送时忽略它。从RFC 6797开始:HTTP Strict Transport Security Host:是用于实施HSTS策略的HTTP服务器方面的合格主机。这意味着HSTS主机在通过安全传输发送的HTTP 响应消息中返回
“ Strict-Transport-Security” HTTP响应标头字段。
...
HTTP主机通过向UA发出HSTS策略来声明自己是HSTS主机,该策略由
Strict-Transport-Security HTTP响应标头字段表示并通过secure
传输(例如TLS)。
...
HSTS主机绝不能在通过非以下方式传递的HTTP响应中包含STS标头字段
安全传输。
...
如果通过不安全传输接收到HTTP响应,则UA
必须忽略任何当前的STS头字段。 br />
*好吧,我不排除Facebook的服务器和您的浏览器都违反HSTS规范的可能性。确实,配置良好且带有HSTS的服务器通常也将配置为不侦听端口80或将永久重定向发送到HTTPS URL。但是请参阅RFC的7.2节以了解其局限性。
#6 楼
我看不到关于HSTS预加载的所有答案。总结一下:现有答案中提到的警告,例如@Lie Ryan的:HSTS使用“首次使用信任”模型。如果您与该站点的首次连接已经受到威胁,则后续请求可能不会收到HSTS错误。
(…)
另外,某些网站没有广告HSTS标头,即使它们支持HTTPS。
不适用于已预加载的网站;也就是说,它们位于网络浏览器内置的列表中。就像使用HTTPS Everywhere一样,此列表中的网站即使在第一次访问时也始终会重写为HTTPS。
因此,HTTPS Everywhere的维护者已决定不会添加预加载列表中的网站。到HTTPS Everywhere的URI数据库(可能从中删除)。
#7 楼
许多域的HSTS配置不正确。例如,Google在www.google.com及其子域上拥有HSTS,但在google.com及其子域上却没有。因此,由于访问https://google.com或https://www.google.com而没有在mail.google.com或drive.google.com上强制实施HSTS。Google的原因具有这样的设置非常复杂。要进入Chrome HSTS预加载列表,必须具有域及其子域的HSTS。我认为Google有一些内部服务,也许是面向公众的服务,无法通过HTTPS运作。因此,针对Google.com所有子域的HSTS都会中断这些服务。所有www.google.com域的HSTS实际上仅覆盖www.google.com,因为它在* .www.google.com上没有任何子域。
但是,HTTPS Everywhere所具有的规则要比允许此类复杂用例的HSTS复杂得多。
评论
您的第一段包含了可接受的答案,第二段暗示了一些内容,但从未解释过-您能否在最后一个陈述中进行扩展?
– schroeder♦
17年4月26日在6:34
我不同意。该答案涵盖了子域,在某些方面,www并不是正常的子域。虽然我可以改善答案,但两段都相关。
–seanieb
17年4月27日在21:56
那么,例如,用于重定向未配置子域的复杂规则?您的最后一句话只是挂在那里...
– schroeder♦
17年4月28日在6:19
#8 楼
我专门为Stack Exchange本身使用HTTPS Everywhere。上次我检查(几个月前)时,它没有使用HSTS,甚至没有从HTTP重定向到HTTPS。但是,它确实提供了HTTPS,因此该附件使我免于潜在的窃听。对于Stack Exchange,情况现在可能已经改变。
评论
Stack Exchange仅在登录页面上使用HTTPS,而不在整个网站上使用。这样可以节省额外的开销,因此有助于更快地加载页面。 HTTPS Everywhere无法执行任何操作。
–吉普赛宇航员
17年4月26日在16:52
我刚刚检查了@ GypsyCosmonaut,stackoverflow.com主页的http和https版本都可用。
– Neith
17年4月26日在16:55
(@GypsyCosmonaut)最近几乎在所有地方都使用https进行堆栈:meta.stackexchange.com/questions/292058/…
–dave_thompson_085
17年4月27日在4:36
@ dave_thompson085是的,现在注意到了,我不好
–吉普赛宇航员
17年4月27日在8:08
只需记住在登录Area51之前在所有位置禁用HTTPS!无论出于什么原因,那里都不支持它。
– jpaugh
17年4月27日在22:09
评论
HTTPS Everywhere早于HSTS。尽管下面的答案确实说明了为什么它现在仍然有用,但是请不要忘记,接受和发布提案要花很长时间,然后又要广泛使用它。因为如果有人链接到您HTTPS网站上http://not-safe-for-work.com上的图像,并且not-safe-for-work.com不使用HSTS,那么会发生不好的事情
HTTPS Everywhere主要是围绕“具有有效HTTPS版本但不进行广告宣传的网站”的用例设计的。过去,甚至Google都在“ encrypted.google.com”上提供了HTTPS版本。从其提交日志和规则集大小可以看出,启用了HTTPS但未从HTTP /使用HSTS重定向到HTTPS的网站的数量并不十分少。
@ user2064000我记得,https://google.com确实重定向到了https://encrypted.google.com;那时,我对SSL非常了解(并为之兴奋),以至于我手动键入了所有URL。