세션 하이재킹(Session Hijacking)에 대해서
세션 하이재킹은 Web에서 유저를 식별하는 세션을 탈취하여 아이디, 패스워드 없이 계정을 도용하는 공격 방법 👀
(Hijacking은 가로채다 라는 뜻)
주로 Stored XSS를 통해 세션 하이재킹 공격이 이루어짐 ❗
Stored XSS 이란? 악성 사용자가 악성스크립트(자바스크립트) 를 게시글 같은 것(서버 db)에 남긴 뒤에,
해당 게시글을 다른 유저가 들어올 때 악성 스크립트가 실행되는 공격
이때 악성 스크립트가 사용자 세션을 공격자 서버에 보내는 것이 포함되어 있으면, 세션 하이재킹이라 부름
대응방안
1. XSS 방어
2. HttpOnly 헤더
3. 세션 발급 시 인증 IP 넣고 검증
1번의 핵심은
사용자의 입력 값이 자바스크립트 형태일 때 어떠한 경우라도 실행되서는 안됨✨
ex) <script>alert('xss 취약')</script>
해당 문구를 검색어에 입력할 시 alert이 실행되거나, 게시글에 남겼을 때 해당 게시글을 들어가면 실행되거나 하는 등
따라서
프론트 단에서 입력 값을 받을 때
1-1. 정규 표현식을 통한 값 검증 (단순 숫자 및 문자+숫자만 허용하게 끔)
1-2. HTML Entity Encoding 처리 또는 보안라이브러리 사용
등으로 값을 처리하는 것이 안전하다.
HTML Entity Encoding 대표적인 예시
< : < (less than)
> : > (greater than)
& : & (ampersand)
" : " 또는 " (double quote)
' : ' 또는 ' (single quote)
2. HttpOnly 헤더 설정 - 사용자가 브라우저 자바스크립트로 해당 쿠키를 접근할 수 없게 된다.
Cookie cookie = new Cookie("sessionCookie", "sessionID");
cookie.setHttpOnly(true); // HttpOnly 설정
3. 세션 발급 시 인증 IP 넣고 검증
cookie 값에 로그인 한 유저 ip값을 넣고
그 후 cookie를 검증할 때 cookie 에 설정 된 ip 값과 현재 요청자의 ip 값을 비교하면 된다.
3번 같은 경우는 공공장소에 와이파이 사용 시 공인 ip가 같을 때는 같은 ip로 인식되므로 주의해야 한다.
👏
👏