쿠키
- 클라이언트에 저장되며 클라이언트(브라우저)에서 조작이 가능하다.
- 서버에서 쿠키를 직접 생성 할 수는 없지만 생성/삭제/수정 하라는 지시문을 보내서 쿠키 조작을 유도 할 수 있다.
- 즉 쿠키를 서버와 클라이언트에서 모두 조작 가능하다.
- 생성 된 모든 쿠키가 전송 되는것이 아니라 호출된 도메인에 해당하는 쿠키만 전송된다.
세션
- WAS를 통해 저장되며 클라이언트가 조작이 불가능하다.
- 딱 1번만 발급된다.
- 응답에 실린 쿠키를 통해 발급받는다.
- 고객에게 개인 공간을 배정하고 그 공간을 열 수 있는 키를 받는것과 비슷하다.
- 브라우저에 접속 후 세션이 필요한 작업을 하지 않으면 세션이 생성되지 않는다.
쿠키와 세션 비교
- 쿠키는 클라이언트가 데이터 조작을 할 수 있기 때문에 안전하지 않다.
- 세션은 클라이언트가 데이터 조작 할 수 없기 때문에 안전하다.
- 세션 이름을 전달 할 때 쿠키로 전송 하는것이 편해서 쿠키는 세션을 구분하기 위해 사용된다고 볼 수 있다.
세션 이름을 큰 난수성을 지니게 하고 길게 설정하는 이유
WAS : Web Application Server
- 웹 애플리케이션을 실행하고 관리하는 서버이다.
- WAS는 사용자가 웹 브라우저를 통해 액세스하는 웹 애플리케이션을 호스팅하고 실행하는 데 사용된다.
- 우리가 실습에서 사용하는 Apache Tomcat도 WAS이다.
XSS(크로스 사이트 스크립팅)
- 웹 애플리케이션에서 발생하는 보안 취약점이다.
- 무작위 방식으로 세션 키 탈취가 어려워서 이런 공격을 시도한다.
- 공격자가 악의적인 스크립트를 삽입하여 사용자의 브라우저에서 실행되게 하는 공격 기법이다.
- 웹 페이지의 입력 필드나 URL 매개변수 등을 통해 스크립트 코드를 삽입해서 공격한다.
- 사용자에게 보이는 콘텐츠를 변조
- 쿠키 및 세션 정보를 탈취
- 사용자를 다른 악의적인 사이트로 리다이렉트
- 사용자의 계정을 조작
- 이런 공격을 막기 위해 HttpOnly 기술이 도입됨
HttpOnly
- 웹 서버가 브라우저에게 쿠키를 설정할 때 사용하는 속성
- HttpOnly를 체크하면 브라우저는 JavaScript를 통해 해당 쿠키에 접근할 수 없기 때문에 쿠키를 수정하거나 하는 행동을 할 수 없음