为什么会话 ID cookie 不安全
Why are session id cookies not secure
当我查看设置会话 ID 的代码时,我看到了下面的代码。我很困惑,因为我知道在 cookie 上设置安全标志的目的是指示 cookie 只能在安全连接上发送。在下面的代码中,我们只设置了连接的 this 标志已经安全。这如何达到防止通过不安全连接发送会话 ID 的目的?
我还在考虑这是否重要?如果会话 ID 以明文形式发送,我们是否容易受到 'main the middle' 攻击?
if (httpRes != null)
httpRes.Cookies.AddPermanentCookie(SessionFeature.PermanentSessionId, sessionId,
(HostContext.Config.OnlySendSessionCookiesSecurely && req.IsSecureConnection));
是的,会话 ID 是客户端发送到服务器的 cookie。
现在假设您从管理员那里窃取了一个 sessionid,然后向服务器发送了一个请求。
如果任何 rights/privileges/data 存储在会话中,您现在可以访问该管理员在他的会话中拥有的所有内容。
Config.OnlySendSessionCookiesSecurely
选项用于启用 Secure flag for Session Cookies. If this option is enabled then the Secure flag is set when accessed over an encrypted https connection as recommended:
for maximum security, cookies with the Secure attribute should only be set over a secure connection.
设置安全标志是为了指示浏览器它们应该只在后续请求中通过加密连接发送此 cookie,因此它只会通过安全连接发送和重新发送。
在不安全的响应中发送 "secure" cookie 有什么意义?这可能意味着 HTTPS 在您的服务器上不可用,并且客户端随后无论如何都会在不安全的 HTTP 连接上发出请求。因此,即使您指示客户端仅通过 HTTPS 连接发送 cookie,当前连接不是 HTTPS 的事实意味着下一个连接可能也不是,并且客户端不会将 cookie 发送回服务器。因此,无论您是一开始不设置 cookie 还是客户端随后不将其发回,都没有什么区别。
现在,如果您说要通过 HTTP 设置 cookie 但仅通过 HTTPS 接收它,那么您就错过了安全 cookie 的要点。如果 cookie 曾经 在任何时候都通过 HTTP 传输,则无法保证其安全性,就好像您一开始就没有使用安全 cookie 一样好。
因此,除非当前连接实际上是安全的,否则忽略安全标志是非常有意义的,也是一种很好的做法。可以说它应该引发异常或其他事情,而不是简单地忽略它并默默地引入不安全因素。
当我查看设置会话 ID 的代码时,我看到了下面的代码。我很困惑,因为我知道在 cookie 上设置安全标志的目的是指示 cookie 只能在安全连接上发送。在下面的代码中,我们只设置了连接的 this 标志已经安全。这如何达到防止通过不安全连接发送会话 ID 的目的?
我还在考虑这是否重要?如果会话 ID 以明文形式发送,我们是否容易受到 'main the middle' 攻击?
if (httpRes != null)
httpRes.Cookies.AddPermanentCookie(SessionFeature.PermanentSessionId, sessionId,
(HostContext.Config.OnlySendSessionCookiesSecurely && req.IsSecureConnection));
是的,会话 ID 是客户端发送到服务器的 cookie。 现在假设您从管理员那里窃取了一个 sessionid,然后向服务器发送了一个请求。
如果任何 rights/privileges/data 存储在会话中,您现在可以访问该管理员在他的会话中拥有的所有内容。
Config.OnlySendSessionCookiesSecurely
选项用于启用 Secure flag for Session Cookies. If this option is enabled then the Secure flag is set when accessed over an encrypted https connection as recommended:
for maximum security, cookies with the Secure attribute should only be set over a secure connection.
设置安全标志是为了指示浏览器它们应该只在后续请求中通过加密连接发送此 cookie,因此它只会通过安全连接发送和重新发送。
在不安全的响应中发送 "secure" cookie 有什么意义?这可能意味着 HTTPS 在您的服务器上不可用,并且客户端随后无论如何都会在不安全的 HTTP 连接上发出请求。因此,即使您指示客户端仅通过 HTTPS 连接发送 cookie,当前连接不是 HTTPS 的事实意味着下一个连接可能也不是,并且客户端不会将 cookie 发送回服务器。因此,无论您是一开始不设置 cookie 还是客户端随后不将其发回,都没有什么区别。
现在,如果您说要通过 HTTP 设置 cookie 但仅通过 HTTPS 接收它,那么您就错过了安全 cookie 的要点。如果 cookie 曾经 在任何时候都通过 HTTP 传输,则无法保证其安全性,就好像您一开始就没有使用安全 cookie 一样好。
因此,除非当前连接实际上是安全的,否则忽略安全标志是非常有意义的,也是一种很好的做法。可以说它应该引发异常或其他事情,而不是简单地忽略它并默默地引入不安全因素。