4

我们已经为我们的网站启用了 HttpOnly。

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

当我们在非安全区域访问该站点时,这工作正常。但是在 Secure live region(Https) 中,这不起作用,我们能够获取会话密钥。如何减轻它。任何想法都会很有帮助。

我正在尝试使用 Asp.Net 2.0

4

1 回答 1

2

我这里有一堆解决方案,伙计。请随意在这些解决方案中进行选择,以满足您的需求

  • 在 Global.asax 中,覆盖 Session_Start 方法,如下所示。

    <script runat="server">       
     void Session_Start(object sender, EventArgs e) 
    {
    
        if(Response.Cookies.Count > 0)
        foreach(string s in Response.Cookies.AllKeys)
         if(s == System.Web.Security.FormsAuthentication.FormsCookieName ||
                s.ToLower().Equals("asp.net_sessionid") )
        Response.Cookies[s].HttpOnly = false;
    

    }


参考: http: //nerd.steveferson.com/2007/09/14/act-sessionid-and-login-problems-with-asp-net-20/#.URiXUqWzd9c

  • 请注意,在 ASP.NET 1.1 中,System.Net.Cookie 类不支持 HttpOnly 属性。因此,要将 HttpOnly 属性添加到 cookie,您可以将以下代码添加到应用程序的

    Global.asax 中的 Application_EndRequest 事件处理程序:

    protected void Application_EndRequest(Object sender, EventArgs e)
    {
      string authCookie = FormsAuthentication.FormsCookieName;
    
      foreach (string sCookie in Response.Cookies)
      {
            if (sCookie.Equals(authCookie))
            {
                  Response.Cookies[sCookie].Path += ";HttpOnly";
            }
      }
    }
    



参考:http: //blogs.msdn.com/b/dansellers/archive/2006/03/13/550947.aspx

  • 将此添加到您的 Global.asax

    void Application_EndRequest(Object sender, EventArgs e)
    {
       if (Response.Cookies.Count > 0)
       {
           foreach (string s in Response.Cookies.AllKeys)
           {
               if (s == "ASP.NET_SessionId")
               {
                   Response.Cookies["ASP.NET_SessionId"].HttpOnly = false;
               }
           }
       }
    

    }

参考:来自这个论坛http://forums.asp.net/p/955272/1177574.aspx#1177574

你也可以试试这个 Post HttpOnly Cookies on ASP.NET 1.1 by Scott Hanselman 但它的 ASP.NET 1.1

于 2013-02-11T07:17:24.623 回答