Nice programing

ASP.NET_SessionId 쿠키를 보호하는 방법은 무엇입니까?

nicepro 2020. 12. 13. 11:05
반응형

ASP.NET_SessionId 쿠키를 보호하는 방법은 무엇입니까?


.ASPXAUTH 쿠키를 https 전용으로 설정했지만 ASP.NET_SessionId로 효과적으로 동일한 작업을 수행하는 방법을 잘 모르겠습니다.

전체 사이트는 HTTPS를 사용하므로 쿠키가 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 || "asp.net_sessionid".Equals(s, StringComparison.InvariantCultureIgnoreCase))
        {
             Response.Cookies[s].Secure = true;
        }
    }
}

이를 global.asax의 EndRequest 이벤트 처리기에 추가하면 모든 페이지 호출에 대해이 작업이 수행됩니다.

참고 : break;성공적인 "보안"할당 내에 설명 을 추가하기위한 편집이 제안되었습니다 . 나는 쿠키 중 하나만 강제로 보호하고 두 번째 쿠키는 무시된다는 생각을 바탕으로이 편집을 거부했습니다. 카운터 또는 다른 메트릭을 추가하여 둘 다 보안이 유지되고 해당 지점에서 중단되는지 확인하는 것은 상상할 수없는 일이 아닙니다.


http 헤더에 ; secure접미사 를 추가하기 위해 web.config Set-Cookie<httpCookies>요소를 사용했습니다 .

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

IMHO는 Anubhav Goyal의 기사 에서처럼 코드를 작성하는 것보다 훨씬 편리합니다.

참조 : http://msdn.microsoft.com/en-us/library/ms228262(v=vs.100).aspx


위의 Marcel의 솔루션을 사용하여 양식 인증 쿠키를 보호하려면 SSL을 사용하도록 "authentication"구성 요소도 업데이트해야합니다.

<authentication mode="Forms">
   <forms ...  requireSSL="true" />
</authentication>

다른 현명한 인증 쿠키는 https가 아닙니다.

참조 : http://msdn.microsoft.com/en-us/library/vstudio/1d3t3c61(v=vs.100).aspx


MSDN 블로그 " Securing Session ID : ASP / ASP.NET " 에서 권장하는대로 Session_Start에서 보안 속성을 설정하는 것으로 충분하다는 것을 알았습니다.

    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 쿠키가 보안으로 설정된 경우 발생합니다. McAfee Secure에 따르면 이는 이제 보안 취약점입니다.

이 코드는 요청이 HTTPS를 사용하는 경우에만 쿠키를 보호합니다. HTTPS가 아닌 경우 sessionid 쿠키가 만료됩니다.

    // 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);
    }

If the entire site uses HTTPS, your sessionId cookie is as secure as the HTTPS encryption at the very least. This is because cookies are sent as HTTP headers, and when using SSL, the HTTP headers are encrypted using the SSL when being transmitted.

참고URL : https://stackoverflow.com/questions/5978667/how-to-secure-the-asp-net-sessionid-cookie

반응형