我已经将.ASPXAUTH cookie设置为仅https,但是我不确定如何有效地对ASP.NET_SessionId进行相同操作。
整个站点都使用HTTPS,因此Cookie无需与http和https一起使用。
Answers:
这是从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 || "asp.net_sessionid".Equals(s, StringComparison.InvariantCultureIgnoreCase))
{
Response.Cookies[s].Secure = true;
}
}
}
将其添加到global.asax中的EndRequest事件处理程序中,应使所有页面调用都实现这一点。
注意:建议进行编辑以break;
在成功的“安全”分配内添加一条语句。我拒绝此编辑是基于这样的想法,即只允许其中一个cookie被强制保护,而第二个则被忽略。添加计数器或其他度量来确定两者均已固定并在该时间点中断是不可想象的。
ASP.NET_SessionId
。可以覆盖msdn.microsoft.com/en-us/library/h6bb9cz9.aspx
requireSSL="true"
在httpCookies
元素中进行设置,并且该设置将起作用-您可能需要先清除现有的Cookie,然后才能看到更改。
要将; secure
后缀添加到Set-Cookie
http标头中,我仅使用<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
asp.net_sessionid
还在不在secure
。您的方法适用于MVC Web应用程序吗?
使用上面的Marcel解决方案来保护Forms Authentication cookie时,您还应该更新“ authentication”配置元素以使用SSL
<authentication mode="Forms">
<forms ... requireSSL="true" />
</authentication>
其他明智的身份验证Cookie不会是https
请参阅:http : //msdn.microsoft.com/zh-cn/library/vstudio/1d3t3c61(v=vs.100).aspx
发现在Session_Start中设置安全属性已足够,如MSDN博客“保护会话ID:ASP / ASP.NET ”中所建议的那样,进行了一些扩充。
protected void Session_Start(Object sender, EventArgs e)
{
SessionStateSection sessionState =
(SessionStateSection)ConfigurationManager.GetSection("system.web/sessionState");
string sidCookieName = sessionState.CookieName;
if (Request.Cookies[sidCookieName] != null)
{
HttpCookie sidCookie = Response.Cookies[sidCookieName];
sidCookie.Value = Session.SessionID;
sidCookie.HttpOnly = true;
sidCookie.Secure = true;
sidCookie.Path = "/";
}
}
添加到@JoelEtherton的解决方案中以修复新发现的安全漏洞。如果用户请求HTTP并将其重定向到HTTPS,但是在首次请求HTTP时将sessionid cookie设置为安全,则会发生此漏洞。据McAfee Secure称,现在这是一个安全漏洞。
仅当请求使用HTTPS时,此代码才会保护cookie。如果不是HTTPS,它将使sessionid cookie失效。
// this code will mark the forms authentication cookie and the
// session cookie as Secure.
if (Request.IsSecureConnection)
{
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;
}
}
}
}
else
{
//if not secure, then don't set session cookie
Response.Cookies["asp.net_sessionid"].Value = string.Empty;
Response.Cookies["asp.net_sessionid"].Expires = new DateTime(2018, 01, 01);
}
如果整个站点都使用HTTPS,则您的sessionId cookie至少与HTTPS加密一样安全。这是因为cookie是作为HTTP头发送的,并且在使用SSL时,HTTP头在传输时会使用SSL进行加密。