在我研究如何让整个网站https的时候,进行了大量的讨论。 最多的答案是将httpredirect到https(.htaccess文件),这是不好的,因为做同样的工作两次(两个请求)是不好的。 此外,“中间人”首先接受http,并且我希望我的网站直接通过https访问。 有没有另一种方法来使您的整个网站https,以及如何做到这一点? 例如,当用户inputexample.com时,该example.com会自动转到https,而不是先从http或其他任何地方redirect?
不可以。您不能神奇地使访问者的浏览器select正确的协议。 redirect是做到这一点的方法。
http://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security允许您的服务器指示只能通过HTTPS访问域。 这只适用于后续请求,所以会有一个初始HTTP负载,但即使某人明确键入HTTP,未来的请求也会加载HTTPS。
IE目前还不支持,但所有其他专业。
正如其他人所说,你不能强迫用户select正确的协议。 但是当用户尝试使用HTTP时,你应该怎么做? redirect也是不够的,因为坐在你和客户之间的攻击者可以拦截redirect,所以客户端永远不会看到它。 客户端将继续发送普通的HTTP,攻击者将从服务器上剥离 SSL层( SSL剥离攻击 )。
唯一可以防止的方法是根本不提供HTTP服务 。 不要在80端口上回答,除非是为纯文本页面服务,指导用户使用HTTPS再次尝试(但不提供攻击者可以操纵的链接)。 这将强制用户在浏览器中键入https://
,这样他们将启动与SSL的连接并阻止MITM攻击。
不完全如此: 如何使用DNS /主机名或其他方式parsing到特定的IP:端口
有一种方法,但大多数浏览器不执行rfc2782。
ceejayoz有最好的答案,以防止这里特别提到的攻击,但我也想指出,这里有很多人失踪了,这基本上是HTTP的另一部分已经搞清楚了。 你想做一个永久的301redirect。 这告诉客户进一步请求新的地址。 所以是的,如果有人input错误的URL,他们会提出2个请求,但是,将来,一个好的客户端应该检测到该URL的请求,并提出正确的请求,以防止更多的浪费的请求。 问题是,这只是为了确切的url。 HSTS通过也表示“在接下来的n秒钟内也不允许来自该域的任何非安全连接”来改进该scheme。
用户不应在不安全的地点访问敏感网站。 他们特别不应该在不安全的地点为他们报名。 这些是基本的用户安全原则,应该像“不要打开来自不可信来源的附件”那样教导。 这对于防止从未被访问过的站点的MiM攻击确实是最好的答案。
作为一个侧面说明,一些浏览器通过也说某些已知的站点总是使用HSTS来改进。 不幸的是,你不能轻易地将自己添加到这个列表。
详细阅读: http : //coderrr.wordpress.com/2010/12/27/canonical-redirect-pitfalls-with-http-strict-transport-security-and-some-solutions/