Flower API Leak Check
UI에서 숨기거나 비활성인 정보가 /qa-api/v1/... 응답에 그대로 오는지 본다.
권한·CP 소유권·플랫폼 스코프 이슈에서 Critical로 자주 등장한다.
관련: flower-authz-matrix · CP feature-support test-plan
입력 패턴
API 누수 / 네트워크 검증
시나리오: (예: CP로 로그인 후 Placements·심사 화면)
숨겨야 할 것: Platform 소유 ID/이름 | 타 조직 리소스 | Device 미제공 필드 …
QA API 베이스 (탐색 기준)
- 브라우저 동일 오리진:
https://flower-qa-campaign-web.anypoint.tv/qa-api/v1/... - 메뉴별 화면은 menu-map.md — 한 기능만이 아니라 권한 민감 화면 전부 후보:
- System:
/system/orgs,/system/users - Resources: content / placements / stb / cdn
- Settings: platform properties, advertisers, DMP segments
- Reviews:
participantId스코프 - Analytics / Demand performance / Revenue / Monetization
- System:
- 자주 보는 호출:
GET /qa-api/v1/validate-tokenGET /qa-api/v1/platforms/{platformId}GET /qa-api/v1/placements?platformId=...&pageSize=999999...GET /qa-api/v1/participants/participant-search-tags?orgType=...GET /qa-api/v1/analytics/ad-requests/...GET /qa-api/v1/analytics/ads/dashboards(Monitoring — 500 관측됨, 응답 형태도 확인)
운영/다른 테마는 엔드포인트 prefix가 다를 수 있음 → 실제 요청 URL을 기록.
Workflow
숨김 기대 정의
- UI: 어떤 라벨/컬럼/메뉴가 없어야 하는지
- API: 어떤 필드·ID·목록이 응답에 없어야(또는 403이어야) 하는지
- 설계에 없으면 확인 필요 — 추측으로 Fail 단정 금지. 단, “UI에 없는 타 조직 PII/이름이 응답에 있음”은 기본적으로 Fail 후보
재현 전 network 버퍼 클리어
- Playwright로 해당 화면 진입·필터 변경·탭 전환을 수행
browser_network_requests(또는 동등)로qa-api만 필터
요청 목록 점검
- 4xx/5xx, 예상 밖 200, 동일 API 중복
pageSize=999999등 과도한 목록 pull이 권한 없는 데이터까지 오는지
응답 바디 스팟
- 핵심 요청을 열어 ID·name·orgType·platformId·placement 등 검사
- UI에 안 보이는 Platform 소유 리소스명/ID, 타 CP 광고영역, 미제공 dimension 값이 있으면 기록
- Ad requests: 플랫폼 스위치 후 summary/time-series가 이전 platformId로 호출되지 않는지
URL 직접 진입과 짝
- 메뉴 숨김 대상 URL 진입 시 API가 200으로 전체 데이터 주면 Fail 후보
- UI empty인데 API 200+데이터면 “표시만 막음”으로 보고
결과
| 판정 | 조건 |
|---|---|
| Pass | 숨김 대상이 UI·API 모두 부재 또는 명시적 403/빈 스코프 |
| Fail | UI 숨김인데 응답에 민감·스코프 밖 필드/목록 |
| Blocked | 설계 미확정으로 허용 필드 범위를 알 수 없음 |
- 증거: 요청 URL + 상태코드 + 문제 필드 경로(값은 필요 최소만) + 스크린샷
→ 버그 시 bug-report
체크리스트 (짧게)
- 플랫폼 전환 후 API
platformId일치 - CP/비대상 역할: 메뉴 없이도 list/detail API 200 전체 조회 여부
- UI
-/ 숨김 지표가 API에 숫자로 오는지 (Geography Imp 등) - 콘솔·Sentry와 별개로 인가 누수만 판정 (sentry envelope 200은 무시)
탐색에서 본 함정
- Sentry
flower-eye.anypoint.tv/.../envelope다수 → 누수 판정에서 제외 - placements
pageSize=999999는 정상 패턴일 수 있음 → 스코프 밖 항목 포함 여부가 쟁점 - Admin은 여러 플랫폼 태그를 볼 수 있음 → 역할 기대치를 먼저 고정
하지 말 것
- 토큰·비밀번호·응답 전문을 레포/스킬에 커밋
- UI Pass만 보고 API 생략
- 정적 JS/이미지 요청을 누수 Fail로 처리