2015-06-24 94 views
0

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

我仍在试图思考它是否甚至重要?如果会话ID以明文形式发送,我们是否容易受到'主要中间'攻击?

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

看来安全标志对session-id来说并不有用。如果session-id cookie由于是不安全的请求而被忽略,那么我们不再有会话。那么为什么要支持'OnlySendSessionCookiesSecurely'呢? – USER9

回答

2

在不安全的响应中发送“安全”Cookie的意义何在?这可能意味着HTTPS在您的服务器上不可用,并且客户端随后会对不安全的HTTP连接发出请求。因此,即使您指示客户端仅通过HTTPS连接发送cookie,但当前连接不是HTTPS的事实意味着下一个连接可能不会发生,客户端也不会将cookie发送回服务器。因此,不管你是不是首先设置cookie,或者客户没有发送回来都没有什么区别。

现在,如果你说你想设置通过HTTP的cookie,但只能通过HTTPS接收它,你错过了安全cookie的点。如果在任何时候通过HTTP传输的cookie有有史以来,它的安全性不能得到保证,就像您首先不使用安全Cookie一样好。

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

0

是的,会话ID是客户端发送到服务器的cookie。 现在想象一下,您从管理员处窃取sessionid,然后向服务器发送请求。

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

2

Config.OnlySendSessionCookiesSecurely选项用于启用Secure flag for Session Cookies

最大的安全性,在安全属性饼干才应该设置通过安全连接:如果启用该选项,然后在通过加密的HTTPS连接as recommended访问的安全标志。

设置安全标志指示浏览器,他们应该只在随后的请求中通过加密连接发送此cookie,以便它只能通过安全连接发送并重新发送。