direct traversal
- 서버로 전달 값을 바꿈
리다이렉션
- 서버와 브라우저 상호작용할 때 브라우저는 자동으로 파일을 불러옴
> 주소 검색 시에 /가 붙음
기본인증
- HTTP 프로토콜 인증방식
클라이언트와 서버 : 디렉토리 요청 > 인증정보가 없음 인지 > 사용자에게 인증정보 요구 > 서버는 검증 > 처리 후 http
상태코드 알려줌
- 기본인증은 안전한 방법이 아님 : base64 인코딩 방식을 사용해서 안전하지 않음
- 요청할 때마다 인증정보를 매번 가져가야됨. (노출 위험)
> form 기반으로 바꿔야함
Stateless
- cookie: Stateless http 프로토콜 상태를 유지하기 위해 도입
단, 요청 헤더와 응답헤더를 통해 전달 > 전달 과정에서 탈취 가능성
브라우저에 저장되고 JavaScript를 이용해서 접근이 가능
- 개발자도구 > console > document.cookie
> 쿠키에 중요 정보 저장X, 사용 X
Session
- 쿠키의 단점 보완
- 중요 정보는 서버에 저장, 접근자에게 서버접근 ID부여
> 세션 ID관리 중요, ID 생성 및 관리 중요
세션ID고정
- 인증 전과 인증 후에 동일한 세션 ID를 사용 : 공격자가 권한 탈취 후 사이트 이용 가능
추측
- Session ID 일정한 규칙
안전한 쿠키 운영 방법
- 중요 정보는 쿠키에 포함X
- 중요 쿠키는 정보 암호화해서 포함
- 쿠키 생성 시에 Secure 속성 활성화해서 보안 통신일 때만 전달
- 쿠키 생성 시에 HttpOnly 속성 활성화 해서 쿠키 직접 접근하지 못하게
- 쿠키 유효기간, 지속시간을 최소한으로 설정
서버는 세션 ID를 이용해서 사용자를 식별
세션 ID가 탈취 당하게 되면, 서버를 속여서 접근 가능
*** 쿠키 값만 같아도 ID/PW가 없어도 로그인버튼만 누르면 로그인이 가능하다.
세션ID 운영 방법
- 인증 전 후에 세션 ID를 다르게 유지
- 세션 ID 생성 규칙을 외부에서 알 수 없도록 > 로그인 후 세션 ID 새로 발급, 로그아웃 시 세션 ID 삭제
- 주기적으로 세션 ID 갱신
- 세션 ID가 담긴 쿠키를 안전한 방법으로 생성하고 관리
인증 방법
타입1 : 지식기반 - 사용자만 알고 있는 정보를 이용해서 인증 > 패스워드
타입2 : 소유기반 - 사용자만 가지고 있는 정보를 이용 > 스마트폰, OTP
타입3 : 특징기반 - 사용자만 가지고 있는 특징 > 필기체, 지문
접근 통제
- 기능 레벨에서의 누락 > 서버에서 접근통제를 해줘야함
ex) 서버에서의 접근 통제가 이루어지지 않음
>> 요청한 사용자의 권한 여부를 체크하는 로직 추가
모듈 프로젝트 : 애플리케이션 만들 시에 취약점 찾아서 방지하거나 만들 때 주의 해서 만들기
- 세션, 블랙리스트, 화이트리스트, 문자열 등 고려해서 만들어야 됨