[시큐어 코딩] #10 보호 메커니즘을 우회할 수 있는 입력값 변조 :: 잡다한 프로그래밍
반응형

0. 배경지식 (쿠키와 세션)

쿠키란?

  • 쿠키는 클라이언트(브라우저)에 저장되는 키, 값으로 이루어진 데이터 파일이다.
  • 이름, 값 만료날짜 등의 정보가 있다.
  • 쿠키는 일정 시간동안 데이터를 저장할 수 있어서 로그인 상태 유지에 사용된다.

쿠키의 원리

  • 클라이언트가 브라우저로 서버로부터 reponse 받을때 쿠키를 받아 저장
  • 이후 가지고있는 쿠키를 header에 넣어 request할때마다 요청함

세션이란?

  • 클라이언트와 서버간 연결이 유지되고 있는 상태를 의미한다.
  • 클라이언트가 서버에 첫 request를 보내면, 해당 서버의 클라이언트에게 유니크한 ID를 부여하고 이를 세션 ID라고 부른다.

세션의 원리

  • 클라이언트가 서버로 request를 보낼시 세션 ID를 만들고 이를 쿠키를 통해 전달함
  • 클라이언트는 이후 request마다 쿠키에담긴 세션ID를 보내고 서버는 이가 유효한지 검증함

1. 정의

응용 프로그램이 외부 입력값에 대한 신뢰를 전제로 보호 메커니즘을 사용하는 경우 공격자가 입력값을 조작할 수 있다면 보호 메커니즘을 우회할 수 있게 된다. 개발자들이 흔히 쿠키, 환경변수 또는 히든필드와 같은 입력값이 조작될 수 없다고 생각하지만 공격자는 이를 변경할 수 있고 이는 에러로 이어진다.

 

2. 안전한 코딩기법

  • 상태 정보나 민감한 데이터는 서버에 저장하고 보안확인 절차도 서버에서 진행한다.

 

3. 예시

다음과 같이 사용자의 역할을 설정할 때 브라우저의 쿠키의 할당된 값을 사용하면 쿠키 값이 변경되는 경우 사용자의 역할이 의도하지 않은 값으로 할당될 수 있다.

 

따라서 사용자 권한, 인증여부 등 중요한 정보는 사용자의 입력값이나 쿠키가 아닌 서버에 있는 세션값을 비교하여 활용한다.

반응형

+ Recent posts