除了在.htaccess中强制使用HTTPS之外,我还需要启用HSTS吗?

时间:2017-03-17 19:51:17

标签: .htaccess ssl https hsts

我对这些内容一无所知所以请回复你的ELI5。

按照我的提供商Dreamhost的说明,我安装了SSL证书,然后将这些行添加到我的.htaccess文件中,以强制将HTTP请求重写为HTTPS请求。

# Redirect http requests to https
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

一切似乎都正常工作,即:每次我尝试使用HTTP访问该域下的页面时,都会将其重写为HTTPS,并在地址栏中显示“安全”图标。

我的问题是,我是否还需要启用HSTS?阅读它,它似乎与.htaccess文件的先前更改完全相同。这是an excerpt from A2 Hosting(不是我的提供者):

  

启用HSTS

     

为网站启用HSTS后,网络浏览器会自动更改任何内容   不安全的请求(http://)来保护请求(https://)。所有你   需要做的是启用HSTS是为您网站的.htaccess添加标题   文件。 Web浏览器识别此标头,然后处理   在没有任何进一步干预的情况下休息。

他们建议将此添加到.htaccess:

Header set Strict-Transport-Security "max-age=31536000" env=HTTPS

Another tutorial,这次特定于Dreamhost,说启用HSTS以及在.htaccess文件中强制HTTPS,但并没有真正说出原因。这个页面暗示了一些不同的东西:

Header set Strict-Transport-Security "max-age=31415926; includeSubDomains; preload" env=HTTPS

我是否需要“https重写”代码段和HSTS?或者只有“https重写”代码片段足够好?我是否需要HSTS代码,如果是,我的帖子中两行HSTS代码之间有什么区别?

2 个答案:

答案 0 :(得分:8)

HSTS允许浏览器默认只在https上进行连接,但每个不同的标志都会有所不同:

  • includeSubdomains

这意味着,如果您的网站位于mydomain.com,则该政策将适用于所有子域(即foo.mydomain.combar.mydomain.com等)。如果没有这个。该政策仅适用于相关的确切域名。

  • 预加载

虽然HSTS在概念上非常棒,但有人首次点击mydomain.com时,浏览器会尝试通过http计划与您的网站联系,因为它不知道您的网站位于{{1} 1}}它为MITM攻击者提供了为您提供网站恶意版本(即TOFU问题)的空间。 要解决此问题,默认情况下应该在https上联系的网站的浏览器有一个集中列表,但是为了能够自己进入该列表,您必须拥有https标记头。您可以详细了解此here

答案 1 :(得分:6)

默认情况下,如果未明确指定方案(http或https),则为http。

因此,需要重定向才能将其重定向到您首选的https版本,因为大多数输入网址的访问者都不会包含该计划,因此请转到http版本。

HTTP严格传输安全(HSTS)是一种安全方法,可确保您始终保持在https上。它实际上并不是要取消对重定向的需求。特别是HSTS的工作原理是向您的Web浏览器发送一条消息(使用HTTP响应标题),说“请在下一个X时间内仅使用https进行此站点”。只有在通过https访问网站时才会发送此消息。因此,如果您没有首先重定向,那么很多访问者可能甚至没有意识到您有一个https站点,因此不会获得HSTS指令。

HSTS主要用作将网站默认值更改为https的方法,以及防止中间人(MITM)攻击可能会阻止您使用http:例如如果你连接到黑客的无线网络并进入你的银行网站,他们将无法劫持这个连接,如果它通过https完成,但如果它是通过http完成,所以攻击者将拦截http请求并停止重定向发生,让您保持http并截取所有与您的银行之间的消息。

您可以在Web浏览器的代码中“预加载”HSTS指令,这样可以提供更高的安全性,因为您不需要首先通过https访问站点以获取HSTS指令。应该注意的是,基本上没有办法从此回来,只有在你真正了解HSTS时才应考虑这一点。 Chrome many, many, many requests to remove sites from Preload list至少需要3个月(其他浏览器无法保证),如果您不使用https,则会在此期间完全无法访问您的网站。所以这里有一个真正的危险!特别是如果您的某些网站通过https(例如www.example.com)提供,但有些网站不是(例如intranet.example.com)。这也是HSTS的危险,但预加载会更危险。

另一点需要注意的是,许多网络代理不会使用HSTS,特别是不会预加载列表(例如搜索引擎抓取工具,旧浏览器等等)。因此,HSTS应该再次使用,而不是替代重定向。

HSTS是一项很好的安全措施,应该被所有站点使用(一旦他们完全停止使用http),但是,像大多数安全措施一样,它确实存在风险。因此,请确保在部署之前了解它。我讨厌网站和教程,说明打开它而不解释它和风险。理论上,使用HSTS的站点可能不再需要重定向,但实际上它仍然需要第一次访问以及不理解或实现HSTS的代理。

总结:

  • 始终使用重定向。
  • 强烈考虑HSTS,但首先要阅读它,并从最低年龄开始,没有包括子域和预加载 - 直到你真正理解它们的意思。
  • 如果运行高风险站点,请考虑将您的站点提交到HSTS预加载列表作为高级别的安全性,但请再次注意此处的风险。只有在你真正了解HSTS并且觉得你需要这种安全级别时才这样做。