Answers:
不幸的是,解决此问题的唯一通用方法是为您的用户提供https://
唯一的服务,并确保他们希望仅使用该服务。最终,用户有责任按照他们的期望检查是否正在使用SSL / TLS。
即使该网站仅接受SSL / TLS连接,其他解决方案也容易受到中间人攻击。攻击者可以拦截流量http://example.com
(根据用户的请求,即使用户甚至example.com
没有在该端口上侦听),并通过建立自己的连接来替代它,并将其https://example.com
代理回用户。
因此,存在针对自动重定向的OWASP规则。它已被删除,可能是因为重定向不是减轻风险(特别是针对被动窃听者)的一种不错的方法,但是并不能解决根本问题。
您可以使用多种技术将用户引导到HTTPS站点,并且使用它们并不是一个坏主意(尽管它不会保护他们免受活跃的MITM攻击者的侵害)。
首先,如果您根本不需要在网络服务器上使用纯HTTP服务,请关闭端口80(例如,Listen 80
在Apache Httpd的配置中删除)。用户将不得不一直使用https://
,这可能很不方便。
其次,在您的Apache Httpd配置部分中的特定路径(Location
或Directory
)中,使用SSLRequireSSL
指令:它将要求使用SSL / TLS(即使您实际上已在备用端口上对其进行了配置)。其他Web服务器可能具有类似的指令。
第三,您可以mod_rewrite
在代码中使用或在其中使用重定向(如果是应用程序)。对于特定的位置,应该执行类似的操作(请参见HTTPS
特殊变量;您也可以使用302,但是如果要使其更永久,则使用301更好):
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(samples/.*)$ https://example.com/$1 [R=301,L]
更重要的是,确保所有指向该安全部分的链接都使用https://
。永远不要依靠自动重定向为您完成这项工作。因此,我建议在开发阶段完全不要使用它。
但是,我注意到我仍然可以非安全地访问该网站,即。通过使用
http
代替https
。
这也听起来像你正在使用两个相同的配置http
和https
。如果您使用的是Apache Httpd,我建议将配置分为两个不同的VirtualHost
s:一个用于端口80,一个用于端口443。它们不必具有完全相同的配置:只是不要只使用HTTPS在HTTP虚拟主机中。
缓解上述问题的一种方法是对支持它的浏览器使用HTTP Strict Transport Security(据我所知,它适用于整个主机)。如果https://
没有重定向就没有使用,那么第一个连接可能仍然会暴露,但是有可能已经预载了一些站点列表, https://
无论如何它们都已启用(并已启用HSTS)。
https://mail.google.com
。如果作为用户,您看到它可以使用http://mail.google.com
,则可能是一个MITM将请求代理到authenticate https://mail.google.com
。不幸的是,如果用户自己不检查,Gmail对此将无能为力。与现实生活中的原则相同:如果爱丽丝想与鲍勃交谈,但与查克(声称是鲍勃)交谈而没有验证ID,鲍勃将不知道这次对话,也将无法做关于它的任何事情。这是爱丽丝的责任。
您所需要做的就是将HTTP流量重定向到https- 请参阅本文“将HTTP重定向到https Apache安全连接–强制HTTPS连接”。
对于子目录,请将其放置在目录本身的htaccess文件中。
RewriteEngine on
RewriteCondition %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://www.maindomain.com/directory/$1 [R=301,L]
实际上,除了使站点具有MITM,snooper和PEBKAC防护所需的步骤外,实际上还可以通过HTTPS强制访问。这不应该是用户的责任,这是行不通的。鼓励您的用户改用安全的浏览器。
强制HTTPS是通过HSTS(HTTP Strict-Transport-Security)完成的。用户首次通过HTTPS(在所有支持的浏览器上;IE缺乏此功能)访问您的网站后,基本HSTS是安全的。 预加载的HSTS始终是安全的,并且涵盖了现代快速发布的浏览器(铬及其衍生版本,Firefox)。
有关HTTP安全性的更完整概述(寻址URL,重定向,Cookie和混合内容),请参阅此HTTPS迁移方法。HSTS是逐步迁移的最后一步。如果您的网站是全新的,则实际上不需要遵循该顺序。
相关标准:安全cookie(如果cookie的生存期比HSTS标头长,则很重要),HttpOnly cookie(在保护cookie的同时),HPKP(适用于现代浏览器和更灵活的攻击者)。