API
API 권한 체크 로직을 안전하게 수정하기
API의 인증/인가 검증을 손댈 때. 상태 코드, 응답 바디, 인증 상태를 단계별로 확인해야 보안 구멍을 만들지 않는다.
API의 권한 검증 로직은 매우 중요하다. 이곳에 버그가 있으면 인가되지 않은 사용자가 접근할 수 있고, 그 반대로 정상 사용자가 차단될 수 있다. 요청과 응답의 전체 흐름을 이해하면서 한 단계씩 검증해야 한다.
현재 상태 파악하기
권한 검증이 어디서 이루어지는지 정확히 파악한다. 미들웨어? 라우터? 컨트롤러? 각 층에서의 검증 순서도 중요하다.
API 테스트로 확인
실제 HTTP 요청을 보내서 응답을 확인한다. 상태 코드, 응답 바디, 에러 메시지가 예상과 일치하는지 본다.
curl -i 'https://example.com/api/items?page=1'
# 또는 REST Client 확장 프로그램 사용
상태 코드와 응답 검증
정상 요청: 200, 성공한 생성: 201, 권한 없음: 401, 금지됨: 403, 존재하지 않음: 404 등. 각 상황에서 올바른 상태 코드를 반환하는지 확인한다.
- 확인할 것: HTTP 상태 코드, 응답 본문, 에러 메시지
- 비교 기준: 정상일 때의 응답
- 기록할 것: 요청 헤더, 응답 헤더, 응답 바디
인증 상태 확인
토큰 기반 인증이면 토큰이 유효한지, 만료되지 않았는지 확인한다. 세션 기반이면 세션이 유지되는지 본다.
# 토큰 없이 요청
curl 'https://example.com/api/items'
# 유효하지 않은 토큰으로 요청
curl -H 'Authorization: Bearer invalid_token' 'https://example.com/api/items'
# 유효한 토큰으로 요청
curl -H 'Authorization: Bearer valid_token' 'https://example.com/api/items'
권한별 접근 테스트
사용자별로 접근 가능한 엔드포인트가 다를 수 있다. 관리자, 일반 사용자, 손님 각각에 대해 테스트한다.
다음 액션 정의
문제를 찾으면 어떻게 수정할지 계획한다. 권한 검증 로직을 추가? 기존 로직을 수정? 테스트 케이스를 추가? 각각을 따로 진행한다.
완료 기준
- 각 권한 수준에서 올바른 상태 코드를 받는가
- 에러 응답이 사용자에게 유용한 정보를 제공하는가
- 권한 검증이 빠졌거나 중복된 부분이 없는가
API 권한 검증은 보안과 직결되므로 변경 후 모든 엣지 케이스를 테스트해야 한다.