04 · CHAPTER 05 · WEB SECURITY
내 것과 남의 것을
가르는 문
인증과 인가의 차이, 객체 접근 통제와 안전한 파일 업로드를 함께 살펴봅니다.
실습 범위 안내 이 장의 확인 과정은 본인이 소유하거나 명시적으로 허가받은 교육·실습 환경에서만 수행합니다. 운영 시스템과 제3자의 장비에는 적용하지 않습니다.
WEB SECURITY STUDY NOTE내 것과 남의 것을 가르는 문Authorization · IDOR · Upload · Path
01
건물에 들어왔다고 모든 방이 내 방일까?
핵심 용어
Authorization IDOR Upload Path
출입증으로 입장했더라도 다른 사람의 사물함을 열 권한까지 생기지는 않습니다.
인증은 누구인지 확인하고 인가는 그 사용자가 무엇을 할 수 있는지 판단합니다.
URL의 숫자나 파일명을 숨기는 것은 권한 통제가 아닙니다. 서버가 소유자, 역할, 조직 범위를 조회해야 합니다.
02
자주 놓치는 접근 경계
핵심 개념
Object ID Role Upload Path Admin Route
화면에 버튼이 없는 것과 서버가 거부하는 것은 다릅니다.
Object ID요청 대상의 소유권 확인
Role기능별 허용 역할 확인
Upload형식·크기·저장 위치 제한
Path기준 디렉터리 밖 접근 차단
Admin Route서버 측 권한 검사
03
허가된 계정으로 비교하기
관련 명령어
php spark routes find writable/uploads -maxdepth 2 -type f -printf "%M %u:%g %p\n" 2>/dev/null grep -R "move(" app/Controllers 2>/dev/null 두 테스트 계정이 서로의 객체에 접근하지 못하는지 확인합니다.
$ php spark routes
$ find writable/uploads -maxdepth 2 -type f -printf "%M %u:%g %p\n" 2>/dev/null
$ grep -R "move(" app/Controllers 2>/dev/null
04
파일은 웹 루트 밖에 저장하기
보안 관점
위험 요소 확인 기준 대응 원칙
원래 파일명을 경로로 사용하지 않고 서버가 새 이름을 만들며 실행 권한을 제거합니다.
권한 거부도 감사 로그에 남기고, 연속적인 객체 번호 조회나 관리자 경로 탐색을 탐지합니다.
보이지 않는 버튼은 보안 기능이 아니다. 서버가 요청마다 대상과 권한을 확인해야 한다.
CHAPTER REVIEW
이번 장에서 기억할 한 문장
로그인한 사용자라도 요청한 데이터와 기능을 사용할 권한이 있는지 매번 확인해야 한다.