2013. 3. 5. 00:43 java

세션 하이재킹 대책

[도서명] 안전한 웹을 위한 코딩 한줄의 정석

 

일반적으로 SESSIONID는 쿠키에 저장된다.

로그인 시 세션 ID의 변경이 불가능한 경우는 토큰에 의한 방법으로 대체함

 

로그인시에 나수 문자열(토큰)을 생성하고 쿠키와 세션 변수에 기억시키는 방법

각 페이지의 인증 확인시에 쿠키상의 토큰과 세션 변수의 토큰값을 비교하여, 

같으면 인증 되었다고 인식

 

토큰이 외부에 출력되는 타이밍은 로그인 할 때이기 때문에 안전

토큰은 예측 곤란성이 요구 되므로 암호론적 유사 난수 생성기를 이용해서 생성해야 함

 

쿠키에 세팅하는 난수는 암호화 해서 세팅해야 함

 

예)

로그인 처리시

setCookie("token", "난수 토큰명", 0, "/"); // 토큰 cookie, 0 은 브라우저 종료시 파기

session.setAttribute("token", "난수 토큰명");

 

인증 후 페이지에서 토큰 확인

String token = getCookie("token"); 

String sessionToken = session.getAttribute("token");

 

if(token == null || "".equal(token) || !token.equal(sessionToken)) {

System.out.println("세션 하이재킹 입니다.");

}

 

문제는 사용자가 브라우저에서 쿠키를 사용하지 않았을 경우이다.

이 경우에는 쿠키를 사용하라는 안내 문구를 보여 줘야 하나?

 

* 예전에는 remoteIp를 이용했었다. 그런데 우리 회사 같은 금융사에서는

  보안에서 하는건지, 네트웍에서 하는건지 x-forword-for 인가 이 옵션을 이용해도

  대표 IP 외에 값을 얻을수 없었다.

  그래서 최근에는 ip에 의한 세션 하이재킹 처리를 하지 않고 있지만

  로그인 시의 remoteIp랑, 각 페이지의 remoteIp가 동일한지 체크하는 것도

  좋은 방법일거 같음

'java' 카테고리의 다른 글

쿠키와 세션 관리  (0) 2013.03.18
owasp 보안 문서  (0) 2013.03.12
대용량 excel 파일 만들기  (0) 2012.12.18
logback 사용해야 하는 이유 (Reasons to prefer logback over log4j)  (0) 2012.11.10
XSS AntiSamy 이용 방법  (0) 2012.05.03
Posted by gt1000

블로그 이미지
gt1000

태그목록

공지사항

어제
오늘

달력

 « |  » 2024.4
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함