这些似乎都基于这样的假设:除了
http://www.example.com
外,我还提供https://www.example.com
。为什么我不只提供HTTPS?也就是说,是否有基于安全性的原因提供HTTP服务-例如,如果我不设置HSTS,有人可以欺骗http://www.example.com
吗?#1 楼
为什么我不只服务https?
主要原因是浏览器的默认行为和向后兼容性。
默认行为
当最终用户(即不了解协议或安全性)在浏览器中键入网站地址时,浏览器默认使用HTTP。有关为何浏览器选择此行为的更多信息,请参见此问题。
,因此,用户很可能无法访问您的网站。
向后兼容性
可能某些使用旧系统和旧浏览器的用户不支持HTTPS或更可能,没有根证书的最新数据库或不支持某些协议。
在这种情况下,他们要么将无法访问网站,要么会发出安全警告。您需要定义最终用户的安全性是否足以强制使用HTTPS。
如果我没有设置HSTS,有人可以欺骗http://www.example.com吗?
如果攻击者想欺骗
http://www.example.com
,需要以某种方式控制域或控制IP地址。我想你的意思是:攻击者可以执行中间人攻击吗?
在那种情况下,是的,但是即使有或没有HSTS,也可以: ,修改内容)或被动(即窃听)
使用HSTS:用户首次尝试使用HTTP访问网站时,攻击者可能会迫使用户使用HTTP。但是,攻击者可以执行攻击的时间窗口有限。
您应该怎么做?
与许多网站一样,您应该允许HTTP连接,并使服务器将用户重定向到HTTPS版本。这样,您将覆盖浏览器的默认行为,并确保您的用户使用HTTPS版本。
没有正确协议或根证书的旧系统将无法访问该站点(或者至少具有一个警告),但是这取决于您的用户群。
结论
禁用HTTP弊大于利。它实际上并不能提供更多的安全性。如果最终用户由于他们的浏览器默认为HTTP而无法访问您的网站,并且您不侦听HTTP连接,那么这样做有什么好处? />
相关问题
为什么键入URL的浏览器默认为http:而不是https :?
为什么HTTPS不是默认协议?
/>为什么不使用SSL?
为什么某些网站强制缺乏SSL?
评论
我指的是粗体的“ With HSTS”项目符号,它表示如果服务器提供从HTTP到HTTPS的重定向,则安全性会降低。
– Ben Voigt
17年4月18日在16:32
@BenVoigt哦,我知道了。为了避免误解,我删除了“如果您提供HTTP”。谢谢
–罗尼
17年4月18日在16:46
此外,某些用户可能无法访问https站点。例如,中国以前一直在阻止所有Wikimedia项目的https流量。
–leo
17年4月19日在10:46
只是对单词选择的更正:用户不是输入“ URL”,而是输入“网址”。 (没有默认方案/协议之类的东西。)
–奥斯卡·斯科格(Oskar Skog)
17年4月19日在16:33
请注意,对于“使用HSTS”,预加载的HSTS实际上甚至可以保护您站点的首次访问者免受MITM攻击。
– Ajedi32
17年4月20日在14:52
#2 楼
出于可用性的原因,您需要提供从所有HTTP URL到HTTPS的重定向。否则,第一次在浏览器的URL栏中输入example.com/some/page
的首次访问者就会遇到连接错误。在浏览器中没有您的HSTS条目的用户仍然会发出HTTP请求。 HTTP上是否存在真正的服务与中间的人无关。重定向。评论
评论不作进一步讨论;此对话已移至聊天。
–Rory Alsop♦
17年4月23日在14:31
#3 楼
投票赞成的答案非常好。如果完全关闭HTTP,则将牺牲可用性而不会对安全性造成重大影响。预加载网站意味着您向浏览器供应商注册了域名,他们将对浏览器进行硬编码,仅通过HTTPS访问您的网站。这意味着,如果用户尝试通过HTTP访问您的网站,则浏览器会将请求更改为HTTPS。他们的用户无需先获取HSTS标头即可获得安全保护。他们将始终通过安全通道与您建立联系。现在,这不能保护正在使用尚未更新其仅HTTPS网站列表的浏览器的用户。即使使用预加载,我也建议不要为使用旧版本或未更新浏览器的少数人关闭HTTP。
但是请注意,预加载是永久的!要离开预加载列表非常困难。
要进入预加载列表:https://hstspreload.org/
评论
退出预载列表将解决什么问题?我的意思是,为什么会有人想要? (我想问的是一个技术问题,而不是花言巧语。我的理解是,如果他们出于某种原因决定停止提供HTTPS,他们只会想离开-对吗?
–通配符
17年4月20日在22:51
@Wildcard是正确的。我能想到的一个用例是,如果某个域是由X者注册的,则他们让该域失效或以其他方式将该域转让给Y者。现在,Y者被迫使用https,即使他们出于诸如成本之类的原因而不想,其拖放式网站创建者的技术限制等。
– Erik
17年4月21日在21:03
@Erik,谢谢。因此,从长期的设计角度来看,我怀疑HSTS的预加载是经过精心选择的永久方法,最终最终目的是在实践中完全弃用HTTP,因此流行的浏览器甚至需要您通过“高级设置”菜单进行操作。启用它。至少我们可以做梦。 :)
–通配符
17年4月21日在21:20
@Wildcard我同意这可能是目标。我想知道,默认情况下还是仅通过IPv6,这将首先在Internet范围内发生? ;)两者都是需要的,但都是艰苦的战斗……
– Erik
17年4月21日在22:11
Scott Hemle对此有一些很好的信息。请阅读有关此内容的博客页面:hpkp.scotthelme.co.uk/death-by-copy-paste简而言之,Scott给出了三个原因。 1)不考虑对您管理的所有子域的影响2)不考虑对您允许第三方管理的所有子域的影响。 3)复制/粘贴标头配置以包括预加载(然后有人在获得您许可或未经您许可的情况下注册您的网站)。
– Taul
17年4月24日在19:21
#4 楼
您不必。某些较旧的浏览器和操作系统(通常是并行运行)没有较新的证书根颁发机构,但它们通常也不支持较新的HTTPS标准。 ,因此实际上并没有丢失。
您可能有一台不支持HTTPS,自定义脚本等的设备。
没有人可以欺骗HTTP,因为DNS记录属于您,A记录指向您的特定IP地址(理想情况下)。
您只是为了保持兼容性而已。
评论
“没有人不能欺骗http” –您是说“没有人可以”还是“每个人都可以”? “ DNS记录属于您,而一条记录则指向您的特定IP地址” —通过这种推理,永远不会发生中间人攻击,因此不需要证书颁发机构和信任链。
– jwodder
17年4月18日在14:09
“没有人可以欺骗http,因为DNS记录属于您” –是。除非有人欺骗了DNS条目,否则可以进行欺骗。
–DaveTheMinion
17年4月23日在2:59
#5 楼
您应该仅支持HTTP以支持向后兼容。并确保您在后端服务器中正确重定向到HTTPS。最好的方法是仅对您的主页或任何不包含敏感信息的页面提供HTTP支持。您不得支持对用户在身份验证后可以访问的页面的HTTP请求。即使有设备(IoT)正在访问服务器的敏感数据,也必须强制它们使用TLS(许多当前设备可以存储证书并创建TLS连接)。请记住,3.0之前的SSL版本确实存在许多漏洞,例如poodlebug等。因此,请从Web服务器禁用所有以前的版本,并仅允许> TLS 1.1。
实施HSTS很好。我建议您还考虑在您的站点上实施HPKP的可行性。
#6 楼
除了https之外,我还使用http来实现两个目的:使http重定向到https网站。如果有人在浏览器中输入您的网站名称,这是针对的。 (真正的用户不会这样做。)此网站将显示一条简单的Coming Soon消息。它还会将其IP地址附加到IP表拒绝列表中,以从服务器中永久禁止该IP。这可以降低使用Masscan的黑客的速度。 (我找到了masscan,方法是存储我阻止的所有IP的用户代理字符串,以向另一位程序员证明这不是Google扫描,但实际上,进行IP扫描的外国黑客正在寻找可尝试入侵的Web服务器)。 br />
评论
如果担心的话,非浏览器在获取内容时会遇到更多麻烦。例如,诸如craigslist之类的网站因混搭而蓬勃发展。对于非人类的“用户”,我看不到打开一些http部分会带来什么危害;他们不在乎网上诱骗,xss或隐私,您甚至不需要提供HTML ...@dandavis-真的有问题吗?如果Craigslist仅使用HTTPS,难道不是每个人都将获取脚本转换为HTTPS吗?大多数HTTP客户端库都包含HTTPS支持。
如果您运行没有问题的纯HTTPS网站,人们应该如何散布有关HTTPS的FUD是不切实际的?想想,老兄!那么可怜的黑客又想到处都没听说过HTTPS的祖母又如何呢?就像您要推广更安全的网络之类。
@Johnny:不像HTTP那样支持HTTP,仅此而已。会变得更好...
@dandavis这让我感到困惑...所有主流浏览器都应该在http之前尝试使用https ...这将解决大量安全问题...