我正在对将会话 ID 存储在本地存储中而不是将其存储在 cookie 中进行安全研究。我了解无法将本地存储中的值标记为 HttpOnly,因此它可能容易受到 XSS 攻击。由于所有输入都经过正确验证,我没有这个问题。
但我发现的另一个问题是在传输到服务器时篡改数据。由于我的本地存储会话 ID 不能标记在 下Secure,因此它有可能通过未加密的通道 (HTTP) 传输。为了缓解这种情况,我想知道是否可以通过受 SSL 保护的 HTTP 访问页面。
我正在对将会话 ID 存储在本地存储中而不是将其存储在 cookie 中进行安全研究。我了解无法将本地存储中的值标记为 HttpOnly,因此它可能容易受到 XSS 攻击。由于所有输入都经过正确验证,我没有这个问题。
但我发现的另一个问题是在传输到服务器时篡改数据。由于我的本地存储会话 ID 不能标记在 下Secure,因此它有可能通过未加密的通道 (HTTP) 传输。为了缓解这种情况,我想知道是否可以通过受 SSL 保护的 HTTP 访问页面。
无法通过 HTTP 访问使用 SSL(或 TLS)保护的页面,因为这意味着该页面不再受到保护。
如果我重新表述这个问题:是否可以通过 HTTP 访问 HTTPS 安全网站的特定页面,那么我会说这是可能的,但非常不安全。此外,带有会话 ID 的 cookie 可能必须与每个页面请求一起发送,因为您需要跨多个页面跟踪会话。这意味着您需要通过 HTTP 为几乎每个页面提供服务,从而使您的网站不安全。
如果您只需要一个页面上的会话 cookie,您可以告诉客户端对该页面执行 HTTP 请求,然后该请求将与所有未设置“安全”标志的 cookie 一起发送。但是,这意味着所有这些 cookie 都容易受到 MITM 攻击,并且可以被任何监听您通信的人读取。
我的建议:永远不要有意识地通过 HTTP 提供 HTTPS 站点的页面。
因此,您需要问自己的问题是 为什么我的会话 ID 不能被标记为仅安全。是因为懒惰,还是有其他原因导致您无法将此 cookie 标记为安全?
顺便说一句,要强制浏览器始终对网站使用 HTTPS(而不是依赖 302 重定向来访问 HTTPS 版本),可以使用 HTTP Strict Transport Security。请参阅OWASP了解更多信息。
是的,当然是。
后一个示例:连接到https://www.amazon.com,您将登陆一个没有任何 SSL 保护的页面。
如果 TLS/SSL 协商失败,则浏览器回退到 HTTP (同时停留在 HTTPS 端口和 URL 上),与回退到 SSL3 的方式相同。
我在浏览 GitHub 时截取了这张截图