[Web] Web · 작성: 2026-07-19 19:15:17 · 조회 3
IDOR(Insecure Direct Object Reference)와 BOLA(Broken Object Level Authorization)는 사실상 같은 문제를 가리킨다. "로그인은 확인하지만, 그 리소스가 요청자 본인 것인지는 확인하지 않는" 패턴이다. OWASP API Security Top 10에서 1위를 차지할 만큼 실무에서 압도적으로 자주 나온다.
GET /api/orders/1042
이 요청이 "로그인 여부"만 확인하고 "1042번 주문이 로그인한 사용자의 것인지"는 확인하지 않으면, 숫자만 바꿔서 (1041, 1043...) 다른 사용자의 주문 정보를 그대로 볼 수 있다. UUID를 쓴다고 완전히 안전한 것도 아니다 — UUID가 응답 어딘가(목록 API, 알림 등)에 노출되면 그걸 수집해서 순회할 수 있다.
파일 다운로드, 계정 정보 수정, 주문 취소처럼 "ID로 특정 리소스를 지정하는" 모든 엔드포인트가 대상이다.
-- 이렇게 하지 말고
SELECT * FROM orders WHERE id = ?
-- 이렇게
SELECT * FROM orders WHERE id = ? AND user_id = ?