如何保护ASP.NET_SessionId cookie?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (18)

我已经将.ASPXAUTH cookie设置为仅用于https,但我不确定如何有效地对ASP.NET_SessionId执行相同操作。

整个站点使用HTTPS,因此cookie不需要同时使用http和https。

提问于
用户回答回答于

以下是Anubhav Goyal撰写博客文章中的代码片段:

// this code will mark the forms authentication cookie and the
// session cookie as Secure.
if (Response.Cookies.Count > 0)
{
    foreach (string s in Response.Cookies.AllKeys)
    {
        if (s == FormsAuthentication.FormsCookieName || s.ToLower() == "asp.net_sessionid")
        {
             Response.Cookies[s].Secure = true;
        }
    }
}

将此添加到global.asax中的EndRequest事件处理程序应该使所有页面调用都发生这种情况。

注意:建议编辑break;在成功的“安全”分配内添加语句。我拒绝了这个编辑,因为它只允许其中一个cookie被强制保护,而第二个将被忽略。添加计数器或其他度量标准以确定两者在此时已被锁定并打破,这是不可想象的。然而,用更新的代码技术,这可能会写得更好:

Response.Cookies[FormsAuthentication.FormsCookieName]?.Secure = true;
Response.Cookies["asp.net_sessionid"]?.Secure = true;
用户回答回答于

要将; secure后缀添加到Set-Cookiehttp标头,我只需使用<httpCookies>web.config中的元素:

<system.web>
  <httpCookies httpOnlyCookies="true" requireSSL="true" />
<system.web>

恕我直言,比在Anubhav Goyal的文章中写代码更方便。

请参阅:http : //msdn.microsoft.com/en-us/library/ms228262(v=vs.100).aspx

扫码关注云+社区