'クッキー'에 해당되는 글 1건
Global.asax의 Application_BeginRequest는 클라이언트의 리퀘스트가 발생하고 서버상의 처리가 시작되기 직전에 일어납니다.
즉 해당되는 페이지의 처리를 시작하기 전에 발생하는 이벤트이죠.
반대로 Application_PreSendRequestHeaders는 해당페이지의 서버처리가 끝나고 클라이언트에게 전송하기 직전에 발생합니다.
이걸 이용해서 웹어플리케이션에서 사용하는 모든 쿠키를 한방에 암호화, 복호화 하는 것이 가능합니다.
개발자는 암호화,복호화에 대하여 특별히 인식하지 않아도 안전하게 쿠키를 보존하는 방법을 제공할수 있죠.
Global.asax에 아래의 두 메서드를 추가합니다.
protected void Application_PreSendRequestHeaders(object sender, EventArgs e)
{
string[] keys = Response.Cookies.AllKeys;
for (int i = 0; i < keys.Length; i++) //클라리언트로 전송해야할 쿠키를 루프
{
//ASP.NET_SessionId는 제외함. 이걸 바꿔버리면 새로운 세션으로 인식해버리기때문에..
if (Response.Cookies[keys[i]].Name != "ASP.NET_SessionId")
{
//이 샘플은 Cookie의 값이 하나일 경우만 복호화 처리를 하도록 했습니다.
//약간 수정을 하면 계층구조의 쿠키값도 암호화처리를 할수 있습니다.
if (Response.Cookies[keys[i]].Values.AllKeys.Length <= 1)
{
//이 샘플에서는 방법을 제시할 뿐이므로 실제 암호화 처리를 생략하고
//::xx를 뒤에 추가하는걸로 암호화했다고 정의합니다.
//여기에서 쿠키를 암호화 합니다.
HttpCookie cookie = Response.Cookies[keys[i]];
Response.Cookies.Remove(cookie.Name); //컬렉션키 재정의를 위해 기존쿠키를 컬렉션에서 삭제
cookie.Name = cookie.Name + "::xx";
cookie.Value = cookie.Value + "::xx";
Response.Cookies.Set(cookie); //쿠키를 재등록
}
}
}
}
protected void Application_BeginRequest(object sender, EventArgs e)
{
string[] keys = Request.Cookies.AllKeys;
for (int i = 0; i < keys.Length; i++) //클라리언트부터 전송되어오는 쿠키를 루프
{
//ASP.NET_SessionId는 제외함. 이걸 바꿔버리면 새로운 세션으로 인식해버리기때문에..
if (keys[i] != "ASP.NET_SessionId")
{
//이 샘플은 Cookie의 값이 하나일 경우만 복호화 처리를 하도록 했습니다.
//약간 수정을 하면 계층구조의 쿠키값도 복호화처리를 할수 있습니다.
if (Request.Cookies[keys[i]].Values.AllKeys.Length <= 1)
{
//이 샘플에서는 방법을 제시할 뿐이므로 실제 복호화 처리를 생략하고
//::xx를 지우는걸로 복호화했다고 정의합니다.
//여기에서 쿠키를 복호화 합니다.
HttpCookie cookie = Request.Cookies[keys[i]];
Request.Cookies.Remove(cookie.Name); //컬렉션키 재정의를 위해 기존쿠키를 컬렉션에서 삭제
cookie.Name = cookie.Name.Replace("::xx", "");
cookie.Value = cookie.Value.Replace("::xx", "");
Request.Cookies.Set(cookie); //쿠키를 재등록
}
}
}
}
추가를 한후에 쿠키를 확인하기 위해 페이지를 하나 만들었습니다.
상단에는 현재 쿠키의 이름과 쿠키값을 리스트로 표시해주는 라벨이 있고 아래에는 쿠키값을 추가할수 있는 텍스트박스와 버튼을 배치했습니다.
TestCookie라는 이름의 Cookvalue값을 추가하고 페이지를 리로드 합니다.
그리고 다음 리퀘스트의 HTTP_COOKIE를 확인해보면 쿠키이름과 값이 암호화되서 클라이언트에 저장된것을 볼수 있습니다.
하지만 페이지상에서는 TestCookie인것을 알수가 있습니다.
실제로도 모든 작업을 Request.Cookie["TestCookie"]로 얻어 낼수가 있습니다.
이러한 조그마한 처리만으로도 커다란 세큐티리홀을 막아낼수 있습니다.
더군다나 요즘처럼 개인정보 유출등에 신경쓰이는때에 하나의 좋은 해결책이 될거 같습니다.
'ASP.Net' 카테고리의 다른 글
| Silverlight 서버전송메시지 보안방법 (0) | 2009/05/01 |
|---|---|
| IE8의 WebSlices기능을 웹사이트에 추가하기 (1) | 2009/03/19 |
| ASP.Net MVC의 무료eBook 공개되었습니다. (0) | 2009/03/14 |
| WebService의 WSDL및 안내페이지 없애기 (0) | 2008/12/09 |
| BeginRequest,PreSendRequestHeaders를 사용하여 쿠키암호화 (0) | 2008/10/30 |
| ASP.Net와 Java Struts 비교 (0) | 2007/03/19 |
![]() |
![]() |
|
![]() |
![]() |
![]() |


Prev





Rss Feed