由于可以在 http 模式下访问您的站点,因此我假设它不包含高度敏感的内容。选择 HTTP 还是 HTTPS 是一个以安全换取性能的问题:
- 所有可以在 HTTP 中完成的事情都可以在 HTTPS 中完成,并且您可以获得更高的安全性
- HTTPS 更消耗资源
根据经验,如果您可以提供足够的资源,请使用 HTTPS;如果数据价值较低,请使用 HTTP。
可以允许将 HTTP 用于普通页面,将 HTTPS 用于敏感页面,例如提供的凭证交换:
- 服务器将拒绝对安全页面的任何 HTTP 请求 => 如果包含 HTTPS 链接的页面被 HTTP 链接重写,您将重定向到 HTTPS 页面或出现错误
- 该站点的整体安全性处于 HTTP 级别
- 您有信心让用户控制敏感页面来自您的网站
您必须注意的是,一旦会话使用了不安全的 cookie(HTTP 模式),您就不应该相信该会话可以访问敏感信息。
所以这是正确的:HTTP 咨询 => 链接到 HTTPS 以进行登录 => 登录后新会话 => HTTP 咨询 - 整体安全性为中低,因为会话 cookie 不安全,您只保护凭据
但这很糟糕:HTTPS登录=>非敏感页面的HTTP咨询=>敏感数据的HTTPS咨询/修改
因为这里会话的安全级别已经降到了HTTP,仍然用于敏感操作。
最小值应该是:
... => HTTP 操作 => 凭证或安全 cookie 的 HTTPS 控制 => 新会话 => HTTPS 操作 ...
这里最大的风险是你应该告诉你的用户登录页面是特殊的,并且他们应该控制小挂锁的存在并且url 在正确的域中。风险在这里:
- 攻击者设法获取了您的登录页面的副本
- 它设法将您的一个用户发送到他控制的页面
- 用户写下他的凭据
=> 攻击者已经获得了用户允许的所有访问权限
TL/DR:只有在 HTTPS 中包含网站的一部分(包括登录页面)才可以接受:
- 登录页面只能在 HTTPS 中访问并创建一个新会话
- 从 HTTP 到 HTTPS 的任何转换都需要控制凭据(或特殊的安全 cookie)
- 在输入凭据之前,您的所有用户都控制登录页面的 URL 是否正确