Skip to content

공유 피드백 링크가 검색엔진에 색인되던 문제 - #195

Merged
i3months merged 1 commit into
devfrom
fix/share-link-noindex
Aug 20, 2026
Merged

공유 피드백 링크가 검색엔진에 색인되던 문제#195
i3months merged 1 commit into
devfrom
fix/share-link-noindex

Conversation

@i3months

Copy link
Copy Markdown
Member

문제

/share/<token>"링크를 받은 사람만" 보라고 만든 읽기 전용 페이지다. 그런데 색인을 막는 장치가 하나도 없었다.

  • public/robots.txt 자체가 없음
  • index.html 에도, 라우트에도 meta robots 없음

사용자가 공유 링크를 블로그·커뮤니티·오픈 채팅에 붙이면 크롤러가 링크를 따라 들어와 리포트 전문을 색인한다 — 강점·약점 요약, 개선 키워드, 학습 방향. 전부 본인 이력서·레포에서 파생된 내용이다.

토큰이 UUID.randomUUID()(122비트)라 추측으로는 못 찾는다. 하지만 색인의 유입 경로는 추측이 아니라 링크이고, 링크 유출은 공유 기능의 정상 사용 과정에서 일어난다. "아는 사람만 보는 링크"와 "검색하면 나오는 페이지"는 전혀 다른 노출 범위다.

수정

1차 — public/robots.txt 신규

User-agent: *
Disallow: /share/
Disallow: /workspace
Disallow: /sessions/
Disallow: /auth/

프론트가 정적 파일로 배포되고(deploy-app.yml/var/www/stackup/frontend/dist/) 게이트웨이 설정이 레포 밖이라 X-Robots-Tag 응답 헤더를 붙일 수 없다. 그래서 크롤링 자체를 막는 쪽을 택했다.

Disallowmeta noindex 를 같이 쓰면 보통 상충한다(크롤링을 막으면 noindex 를 읽지도 못한다). 여기서 굳이 둘 다 두는 이유는 아래 2차의 대상이 애초에 robots.txt 를 안 지키는 크롤러라서다.

2차 — useNoIndex

공유 페이지가 떠 있는 동안만 <meta name="robots" content="noindex, nofollow, noarchive"> 를 붙이고 언마운트 시 걷어낸다. robots.txt 는 무시하면서 JS 는 실행하는 크롤러 대비.

index.html 에 정적으로 넣지 않은 이유: SPA 라 문서가 하나뿐이다. 거기 넣으면 랜딩 페이지까지 통째로 색인에서 빠진다.

확인한 것 (문제 없음)

  • 공개 페이지 payload 에 PII 없음 — FeedbackResponse.fromPublicshareToken 을 지우고, 이름·이메일·GitHub 계정은 애초에 필드에 없다
  • 공개 페이지는 FeedbackReport 만 렌더 — 실제 문답 전문(InterviewTranscript)은 소유자 화면에만 있다
  • 공유·해제 버튼은 shareable prop 게이팅으로 소유자 화면에서만 노출

테스트

useNoIndex.test.ts 2 케이스 — 마운트 시 meta 주입, 언마운트 시 제거(안 걷어내면 다른 페이지로 이동한 뒤에도 남아 앱 전체가 색인에서 빠진다).

npm run builddist/robots.txt 가 산출물에 포함되는 것을 확인했다.

/share/<token> 은 "링크를 받은 사람만" 보라고 만든 페이지인데 색인을 막는
장치가 하나도 없었다(robots.txt 없음, meta robots 없음). 사용자가 그 링크를
블로그나 커뮤니티에 붙이면 크롤러가 따라 들어와 리포트 전문 — 강점·약점·학습
방향, 전부 본인 이력서에서 파생된 내용 — 을 색인한다. 토큰은 UUIDv4 라
추측으로는 못 찾지만, 링크 유출은 공유 기능의 정상 사용 과정에서 일어난다.

1차 방어는 robots.txt Disallow 다. 프론트가 정적 파일로 배포돼 응답 헤더
(X-Robots-Tag)를 붙일 수 없어서 크롤링 자체를 막는 쪽을 택했다.
2차로 useNoIndex 훅이 공유 페이지에서만 meta robots 를 붙였다 뗀다 —
robots.txt 를 무시하면서 JS 는 실행하는 크롤러 대비.

index.html 에 정적으로 넣지 않은 건 SPA 라 문서가 하나뿐이라서다.
그렇게 하면 랜딩 페이지까지 통째로 색인에서 빠진다.
@i3months
i3months merged commit 977e64f into dev Aug 20, 2026
5 checks passed
@i3months
i3months deleted the fix/share-link-noindex branch August 20, 2026 15:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant