我们的应用程序目前将 HTTP 重定向到 HTTPS。现在,出于安全原因,我们想完全删除此 HTTP 绑定,并通过在 IIS 中配置“需要 SSL”让用户仅使用 HTTPS。
问题是我们仍有大约 10% 的用户使用此 HTTP 重定向页面,因此我们不能直接关闭 HTTP 重定向。很多用户最终可能会致电帮助台。
现在的想法是在第一个版本中让 HTTP 重定向页面链接到一个新页面,其中包含有关要使用的新链接的信息。在下一个版本中,我们可以完全启用“需要 SSL”。
这个解决方案似乎不错,但如果将 HTTP 重定向到信息页面并同时要求 SSL 会更好。这可能吗?
也非常欢迎针对此问题的任何其他建议。谢谢。
答案1
如果您打开“需要 SSL”,则 HTTP 请求将立即失败。
在执行相同操作之前,我们使用的一个技巧(使用 ASP.NET)是检查默认页面上的协议,然后发出友好警告,例如
If Not Request.IsSecureConnection Then
loginform.visible = False
ltl_warning.Text = "Non-secure connections will be disabled in one month, please use the secure address only: https://mysite.com"
End If
答案2
“需要 SSL”仍然会在没有 SSL 的情况下做出响应,因此 MITM 攻击仍然存在可能性。
为了确保网站安全,您应该使用重定向,然后发送严格传输安全标头,这样在第一次访问之后,用户浏览器将不会尝试在未使用 SSL 的情况下进行连接。
进一步阅读
答案3
可以通过将 403.htm 页面替换为以下内容来要求 SSL 并重定向:
<html>
<head><title>Redirecting...</title></head>
<script language="JavaScript">
function redirectHttpToHttps()
{
var httpURL= window.location.hostname + window.location.pathname + window.location.search;
var httpsURL= "https://" + httpURL;
window.location = httpsURL;
}
redirectHttpToHttps();
</script>
<body>
</body>
</html>
不确定这个解决方案是否考虑到了我们尝试通过重定向修复的安全问题。
答案4
Bradlis7 给出了唯一正确的答案。如果您担心 MITM,那么在网站上所做的任何事情都无法解决这个问题。您可以完全禁用网站的 HTTP,如果客户端上有中间人代理,它只会说“是的,肯定有一个 HTTP 网站,请关注我。”
实际上,只需将所有 HTTP 流量转发到 HTTPS,就可以为用户带来更多好处。另外,在我看来,您应该将任何非 HTTPS URL 的请求转发到您的主页(最好带有注释),而不是转发到所请求 URL 的动态版本,因为所请求的 HTTP URL 可能已被您担心的第三方 MITM 操纵。