API 식별자 난독화를 위한 Hashids 도입#228
Conversation
63ed3de to
a875573
Compare
📊 코드 커버리지 리포트
|
|
이 부분은 구현 의도를 한번 확인해보고 싶습니다. 현재 PR의 목표가 API 식별자를 해시 문자열로만 받도록 바꾸는 것이라면, 아직 raw numeric ID 입력이 그대로 허용되고 있는 것 같습니다. 같은 PR의 통합 테스트에서도 즉 응답 직렬화는 해시로 바뀌었지만, 입력 쪽에서는 숫자 ID를 계속 보낼 수 있어서 난독화 강제가 완전히 되지 않은 상태로 보이는데요. 이 부분은 의도된 호환 정책일까요, 아니면 또한, 프론트의 즉각 대응이 이루어져야할 변경사항으로 보이는데요. 이 부분에 대해서도 의견 궁금합니다. |
꼼꼼한 리뷰 정말 감사합니다! 현재 raw numeric ID가 통과되고 있는 것은 의도된 하위 호환 정책이 아니라 Spring의 타입 변환 메커니즘이 만들어낸 엣지 케이스였습니다. 원인
해결 방법검증 시점 격상
명확한 에러 코드
말씀하신 대로 난독화가 강제되었기 때문에, 프론트엔드 팀에서도 즉각적인 대응이 필요할 것 같습니다. |
|
리베이스 부탁드립니다. |
6700685 to
d6a7ba2
Compare
- @DecodeHash의 raw numeric ID 통과 취약점 수정 및 검증 인터셉터 도입 - Hashids 난독화에 따른 Swagger 문서화 전역 자동화 - PathVariable Hashids 난독화를 위한 @DecodeHash 도입
d6a7ba2 to
12602ed
Compare
@Goder-0 리베이스 및 커밋 정리 완료하였습니다. |
Goder-0
left a comment
There was a problem hiding this comment.
작업이 완료되었다고 판단되어 승인합니다.
한편, 프론트 대응작업으로 Team-SoFa/linkiving#517 이슈를 생성하였습니다. 해당 이슈를 해결하는 PR이 올라온 이후 머지가 되는것이 좋을 것 같습니다.
관련 이슈
PR 설명
작업 내용
1. Hashids 유틸리티 도입 및 환경 설정
application.yml의 전용 Salt 값을 활용하여 인코딩(Long -> String) 및 디코딩(String -> Long)을 전담하는 컴포넌트를 구현함.2. Jackson 커스텀 직렬화/역직렬화 자동화
HashidSerializer와HashidDeserializer를 구현하여 DTO 변환 과정을 자동화함.Long타입을 유지하여 로직의 일관성을 확보하고, 외부 통신 계층(DTO)에서만 데이터가 투명하게 변환되도록 처리함.3. @DecodeHash 어노테이션 및 Formatter 구현
@DecodeHash어노테이션을 생성Long타입으로 자동 파싱해주는HashidsFormatterFactory를 구현FormatterRegistry에 등록하여 전역적으로 동작하도록 설정3. API 적용 및 컨트롤러 보완
LinkResponseDto등 외부 노출 DTO의 ID 필드에@JsonSerialize,@JsonDeserialize어노테이션을 반영함.@PathVariable또는@RequestParam에@DecodeHash어노테이션만 선언하면, 프론트엔드에서 넘어온 Hash 문자열이 자동으로Long타입 식별자로 바인딩됩니다.2. Swagger(OpenAPI) 문서화 전역 자동
OperationCustomizer):@DecodeHash만 선언하면 Swagger 문서 상에 자동으로string타입과 예시 값(aB9x2K8R)이 완벽하게 매핑되도록 커스터마이징함.PropertyCustomizer):@Schema(type = "string", ...)설정을 완전히 제거함.@JsonSerialize및@JsonDeserialize속성을 추적·스캔하여, 해시 난독화 시리얼라이저를 사용하는 모든 DTO 필드가 Swagger 상에서 자동으로string타입으로 기술되도록 완전 자동화를 구현함