茱莉亚·伊万斯

使用严格传输安全报头

我今天更新了站点以使用严格运输安全(或)“HSTS”正如人们常说的)头部,我认为这是一件有趣的事情,所以我想我会告诉你所有的事情。

关于网络安全帖子的额外声明:我不是一个安全保护者,你不应该听我的安全建议,安全问题很复杂。这正是我所理解的!我认为这大部分都是对的,但如果是错的,请告诉我!!

HTTPS是好的

Strict-Transport-Security头部背后的思想是,如果您有一个HTTPS站点(比如github.com),您可能希望您的用户总是使用站点的HTTPSversion。

直到昨天,我的站点有一个HTTP版本和一个HTTPS版本。所以你可以去HTTP//JVNS.CAHTTPS://JVNS.CA,取决于你想要什么!这很好,因为我的站点是一个静态的HTML站点,上面根本没有私有内容。

但是很多网站具有私人内容,而且应该一直使用加密!如果您一直希望站点具有HTTPS,那么标准做法是:

  1. 完全不要提供站点的HTTP版本。始终将HTTP重定向到HTTPS(运行curl-I http://github.com要确保它们直接连接到HTTPS!)
  2. 强制浏览器从未访问HTTP版本(甚至一次!)使用HSTSheader和预载列表,我会解释的!!

据我所知,有两个原因不足以只是重定向HTTP->HTTPS是:

理由1如果我去http://github.com,默认情况下,我的浏览器将发送未经加密的GitHubcookies,这太糟糕了!有人会偷的!所以如果我从来不去拜访http://github.com完全,即使我偶然输入或者点击恶意链接。您还可以通过设置保护在饼干上打旗子,虽然,这意味着它永远不会通过HTTP发送。

理由2如果一个粗略免费的wifi门户开始提供假服务Github.com站点,那我就不想我的浏览器被骗了。如果mybrowser拒绝访问github.com的任何HTTP版本,曾经,那我就更安全了。一个邪恶的ISP不能在我的网站上插入广告/恶意软件!!

严格传输安全头部

严格运输安全也被称为HTTP严格传输安全或““HSTS”.我会用““HSTS”和“严格运输安全可互换地。

让我们从一个GitHub如何使用Strict-Transport-Security头部的示例开始,然后我们将讨论它的作用!!

第一,如果我试着去http://github.com,我只是得到一个重定向到网站的HTTPs版本。下面是这个样子的

[电子邮件保护]~curl-I http://github.comHTTP/1.1301Mo.PermanentlyContent-.:0Location:https://github.com/Connection:close

下一步,当我访问时https://github.com,你可以看到他们回来了严格运输安全

[电子邮件保护]~curl-I https://github.comHTTP/1.1200OKServer:GitHub.comDate:Sun,2017年4月30日17:36:21 GMTContent-Type:text/html;charset=utf-8.:200OKStrict-Transport-Security:max-age=31536000;包括子域;预压

所以,这是什么严格运输安全报头意味着什么?“严格运输安全是一种告诉浏览器的方法嘿,永远不要访问此站点的HTTP版本.

所以在我参观之后HTTPS://github.com在我的浏览器上一次,它永远不会来HTTP协议://github.com。如果我写http://github.com只是假装我写了HTTPS.

预加载列表

可以,所以您设置了Strict-Transport-Security头部!太棒了,但是第一次有人试着去http://github.com他们仍然会访问不安全的版本。

浏览器就是这样做的另一个叫做"预载列表.这个想法是Chrome和Firefox将下载一个应该全部使用HTTPS的站点列表。如果网站在列表中。

如果你想申请将你的网站添加到列表中,你可以做https://hsts.oad.org/.您可以在https://hsts.oad.org/?domain=github.com.(他们在名单上!))

我为什么打开它??

我把嵌入的支付表单放入这个博客帖子(来自Gumroad)付款肯定是使用HTTPS来完成的(Gumroad在我的站点中嵌入了一个安全的iframe),所以你可能认为网站是HTTP还是HTTPS并不重要!!

但是,如果您的站点同时具有HTTP和HTTPS内容,然后用户的浏览器将显示混合内容警告.

混合内容不好的原因是——任何HTTP内容都可能受到干扰!因此,如果我有一个嵌入了init的安全支付内容的HTTP页面,有人可以用“坏账”来代替安全支付。那可不好!如果页面上的所有内容都是HTTPS,然后我们知道这一切都是肯定的,从谁说。

我发现引人注目的另一个原因是——有时ISP会向网站上投放广告。我不想在我的网站上插入广告!我希望人们看到我的网站正是我打算让他们看到它。如果我的网站一直使用HTTPS,我可以确信没有人对此做过任何粗略的事。

还有一个论点需要提出HTTPS可以比HTTP更快(对于支持HTTP/2的站点,我的之所以这样做,是因为我使用了Cloudflare)。我不知道我的网站是否用HTTPS更快,但是那篇博客文章真的很有趣,你应该读一读。

你不能回去

我使用Cloudflare的免费版本,我通过点击启用HSTS.在让我做之前,我必须阅读以下警告:

如果启用了HSTS并离开了Cloudflare,您需要继续通过新的服务提供商来支持HTTPS,否则您的站点将无法被访问者访问,直到您再次支持HTTPS。

如果在启用HSTS时关闭Cloudflare的HTTPS,并且您的原始服务器上没有有效的SSL证书,您的网站将变得无法访问的访问者。

这有点可怕!基本上,在打开HSTS之后,浏览器会拒绝访问站点的HTTP版本。所以你最好确保你能够永远保持你的网站的HTTPS版本。这就是最大年龄设置的目的(我把它设置为1个月开始,因为我很紧张,那是他们让我使用的最低设置)。这就是为什么我第一次为我的网站制作HTTPS版本时没有立即打开HSTS的原因。

幸运的是,现在,任何人都可以通过让我们加密所以即使我不再使用Cloudflare,我可以很容易地为我的网站获得TLS证书,并继续提供安全版本。

这就是说,如果你想打开HSTS,确保你随时准备为安全站点提供服务是非常重要的。

云闪

从技术上讲,我的站点使用HTTPS并不意味着站点上的所有内容都来自–Cloudflare实际上拥有我的站点的TLS证书,他们可以(而且可以!向我的网站添加内容,就像谷歌的分析代码。

我没关系,因为我相信Cloudflare不会在我的站点上添加任何东西,但是我认为记住它仍然是有用的。

如何判断我的站点是否正确使用HSTS标头??

好问题!有一个叫做https://.atory.mozilla.org/..html你可以用来给你一张成绩单!!

例如:

您可以看到GitHub获得了A+(是的!我得了个F(aw.)我认为这没关系,因为我的网站没有设置任何cookie敏感信息,但是它让我觉得应该现在提高我的站点的评级。

这就是全部!!

要了解的安全头有很多。这里有一个偏袒者:

  • 访问控制-允许来源
  • 内容安全策略
  • 严格运输安全

我认为那三个是最重要的??

还有

  • 公钥引脚
  • X-Content-Type-Options
  • X帧选项
  • X-XSS保护
  • ……还有更多!!

这个Mozilla Web安全指南如果您希望了解某个特定的头部的作用,那么在我看来,它是一个很好的参考。