我们应该强制用户在网站上使用 HTTPS 吗?

信息安全 Web应用程序 tls
2021-08-18 07:20:56

如果我们将网站从 HTTP 强制转换为 HTTPS,其中一种方法是使用 .htaccess:

RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]

但我注意到,像谷歌翻译这样的一些服务不能翻译任何 HTTPS 网站。

那么在保证用户安全的同时,最好的做法是什么?

  • 即使他们浏览静态页面,也使用 .htaccess 强制使用 HTTPS

  • 不要强制用户自动使用 HTTPS,但超链接中的链接会链接到 HTTPS?

  • 仅在表单 POST 或包含敏感信息的页面时使用 HTTPS。

  • 允许用户选择 HTTP 或 HTTPS

  • ...

4个回答

设置一个规则,将任何通过 HTTP 访问该站点的尝试重定向到通过 HTTPS 的首页(将任何访问与 匹配的任何尝试重定向http://www.example.com/*https:/www.example.com/

启用HSTS这告诉浏览器将来通过 HTTPS 连接到您的站点。

在所有 cookie 上设置secure标志。

确保通过 HTTPS 传递的页面不会通过 HTTP 加载任何内容。

阅读本网站上的以下问题:

如果您的站点使用身份验证,那么它还必须在会话期间使用 HTTPS。

这种重写条件是不安全的。攻击者仍然可以使用 SSLStrip 之类的工具劫持重定向,如果用户发布敏感信息,那么它将被泄露。您应该启用 HSTS 以强制执行 HTTPS 和读取Owasp A9 - 传输层安全性不足

这完全取决于您没有说明的安全目标。如果您是银行网站,那么可以,强制所有 https 访问。如果您是一个拥有用户帐户的搜索引擎,那么可能会使用一些页面强制执行 https 的模型。如果强制使用所有 https 的安全优势超过了您的业务模型的缺点,那么就去做,否则接受安全风险。

如果您让您的任何页面不安全,那么您的所有页面都是不安全的,因为您和您之间的任何人(如咖啡店中的其他人)都可以轻松拦截所有流量并用https://链接替换http://链接。然后,他们可以对您网站上的任何页面做任何他们想做的事情(比如用他们自己的页面替换登录页面,然后访问用户存储在您网站上的任何内容)。

有两种方法可以解决这个问题(它们一起使用):

  • 在每个页面上使用 HTTPS。这样,无论用户如何访问您的网站(无论他们使用哪个书签),他们都将始终直接访问安全版本。

  • 使用HTTP 严格传输安全这使得一旦用户的浏览器访问过您的站点一次,它将在一段时间内拒绝连接到不安全的版本。这不是最好的,但总比没有好。

唯一的缺点是:

  • 某些服务(例如 Google 翻译)已损坏。
  • HTTPS 占用的处理能力完全微不足道。这个借口在 10 年前几乎是有道理的,但现在我们的计算机速度如此之快,除非你是谷歌,否则你甚至不会注意到。如果您是 Google,您可以负担得起让客户满意的费用。