为什么会话ID cookie不安全

时间:2015-06-24 06:07:47

标签: servicestack

当我查看用于设置会话ID的代码时,我会看到下面的代码。我很困惑,因为我知道在cookie上设置安全标志的目的是为了表明cookie应该只在安全连接上发送。在下面的代码中我们只设置连接的这个标志已经是安全的。如何防止会话ID通过不安全的连接发送?

我仍在努力思考它是否重要?如果会话ID以明文形式发送,我们是否容易受到“主要中间”攻击?

if (httpRes != null)
            httpRes.Cookies.AddPermanentCookie(SessionFeature.PermanentSessionId, sessionId,
                (HostContext.Config.OnlySendSessionCookiesSecurely && req.IsSecureConnection));

3 个答案:

答案 0 :(得分:2)

Config.OnlySendSessionCookiesSecurely选项用于启用Secure flag for Session Cookies。如果启用此选项,则在通过加密的https连接as recommended访问时设置安全标志:

  

为了最大限度地提高安全性,只应通过安全连接设置具有Secure属性的Cookie。

设置安全标志是指示浏览器只应通过加密连接在后续请求中发送此cookie,因此它只能通过安全连接发送和重新发送。

答案 1 :(得分:2)

发送"安全"有什么意义? cookie在无担保的响应中?这可能意味着您的服务器上没有HTTPS,客户端随后会在不安全的HTTP连接上发出请求。因此,即使您指示客户端仅通过HTTPS连接发送cookie,当前连接不是HTTPS的事实意味着下一个连接可能不会成为,并且客户端不会将cookie发送回服务器。因此,无论您是在第一时间设置cookie还是客户端未随后将其发回,都没什么区别。

现在,如果您说要通过HTTP 设置 Cookie,但只通过HTTPS接收,那么您就错过了安全Cookie的重点。如果cookie在任何时候通过HTTP传输 ,则无法保证其安全性,并且它与您首先使用安全cookie一样好。

因此,除非当前连接实际上是安全的,否则忽略安全标志非常有意义并且是良好的做法。可以说它应该引发一个例外或者某种东西,而不是简单地忽略它,然后默默地引入不安全感。

答案 2 :(得分:0)

是的,会话ID是客户端发送给服务器的cookie。 现在假设您从管理员窃取了一个sessionid,然后向服务器发送请求。

如果会话中存储了任何权利/特权/数据,您现在可以访问该管理员在其会话中拥有的所有内容。