在研究如何使整个网站成为https时,有很多讨论。最多的答案是将http重定向到https(.htaccess文件),这不好,因为两次执行相同的工作(两次请求)并不好。另外,“中间人”首先使用http,我希望我的网站直接使用https。还有另一种方法可以使整个站点都为https,以及如何做到这一点?例如,当用户在example.com中键入内容时,该example.com会自动转到https,而无需首先从http或其他任何地址重定向?
在研究如何使整个网站成为https时,有很多讨论。最多的答案是将http重定向到https(.htaccess文件),这不好,因为两次执行相同的工作(两次请求)并不好。另外,“中间人”首先使用http,我希望我的网站直接使用https。还有另一种方法可以使整个站点都为https,以及如何做到这一点?例如,当用户在example.com中键入内容时,该example.com会自动转到https,而无需首先从http或其他任何地址重定向?
Answers:
不能。您无法神奇地使访问者的浏览器选择正确的协议。重定向是执行此操作的方法。
http://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security允许您的服务器指示仅应通过HTTPS访问该域。这仅适用于后续请求,因此将进行初始HTTP加载,但是即使有人明确键入HTTP,以后的请求也将加载HTTPS。
IE还不支持它,但是其他所有专业都支持。
正如其他人所说,您不能强迫用户选择正确的协议。但是,当用户尝试使用HTTP时,该怎么办?重定向也是不够的,因为坐在您和客户端之间的攻击者可以拦截重定向,因此客户端永远不会看到它。客户端将继续发送纯HTTP,攻击者将从服务器剥离 SSL层(SSL剥离攻击)。
防止这种情况的唯一肯定方法是根本不提供HTTP服务。不要在端口80上应答,除非可以提供纯文本页面,以引导用户使用HTTPS再试一次(但不提供攻击者可以操纵的链接)。这将迫使用户键入https://
他们的浏览器,因此他们将使用SSL发起连接并防止MITM攻击。
https://
。取而代之的是,他们会说“呵呵,站点已损坏”然后离开。最好的情况可能是同时www.example.com
响应HTTP和HTTPS,但是使应用程序本身admin.example.com
仅在HTTPS 上运行。
并非完全正确:如何使用DNS /主机名或其他方式解析为特定IP:端口
有一种方法,但是大多数浏览器没有实现rfc2782。
ceejayoz拥有最佳的答案,可以防止此处提到的特殊攻击,但我还想指出,这里很多人都缺少了,这基本上是HTTP的另一部分已经解决了。您要执行永久301重定向。这告诉客户端对新地址进行进一步的请求。因此,是的,如果有人输入错误的URL,他们将发出2个请求,但将来,一个好的客户端应该检测到对该URL的请求并发出正确的请求,以防止浪费更多的请求。问题在于,这仅适用于该确切的URL。HSTS还通过说“在接下来的n秒内也不允许来自该域的任何非安全连接”来改进此方案。
用户不应在不安全的位置访问敏感站点。他们尤其不应在不安全的地方注册他们。这些是基本的用户安全性原则,应该像“不要打开不受信任的来源的附件”这样教。对于从未访问过的站点,防止MiM攻击确实是最好的答案。
附带说明,某些浏览器通过说某些已知站点始终使用HSTS对此进行了改进。不幸的是,您不能轻松地将自己添加到此列表中。
进一步阅读:http : //coderrr.wordpress.com/2010/12/27/canonical-redirect-pitfalls-with-http-strict-transport-security-and-some-solutions/