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 |