ASP.Net

Session state and session cookies best practices

Best practices for the session state:

  • Change the default session ID name. In ASP.NET, the default name is ASP.NET_SessionId. This immediately gives away that the application is ASP.NET and that that cookie contains the session ID value
  • Make sure the length of the session ID is long enough to prevent brute force attacks. Recommended length is 128 bits
  • Make sure to create the session ID in a completely random way. This ensures that attackers can’t guess the session ID by using predictability analysis
  • Ensure that the session ID does not contain any additional sensitive data. The data should be a random string of characters with no meaning
  • HTTPS should be used for all session based applications handling sensitive data
  • Session cookies should be created with the Secure and HttpOnly attributes
  • Prevent concurrent sessions where possible
  • Destroy sessions upon timeout, logoff, browser close or log-in from a separate location

 

Best practices for the session cookies:

  • Do not store any critical information in cookies. For example, do not store a user’s password in a cookie. As a rule, do not keep anything in a cookie that can compromise your application. Instead, keep a reference in the cookie to a location on the server where the data is
  • Set expiration dates on cookies to the shortest practical time. Avoid using permanent cookies
  • Consider encrypting information in cookies
  • Consider setting the Secure and HttpOnly properties on the cookie to true

Example
Here are a few examples of implementing best practices for cookies:

Web.config file:

<system.web>
    <sessionState regenerateExpiredSessionId="false" cookieless="UseCookies" cookieName="id" />
</system.web>

Code-behind file:

Response.Cookies.Add(new HttpCookie("id", ""));
Response.Cookies["id"].HttpOnly = true;
Response.Cookies["id"].Secure = Convert.ToBoolean(ConfigurationManager.AppSettings["SecureCookie"]);

References:

 

Laurent

Feel free to share:)