
공유 URL을 Python으로 감사하기: noindex와 인증은 별개
요약
공유 URL의 'noindex' 설정이 실제 비공개(Private)를 의미하지 않음을 경고하며, Python을 이용해 공유 링크의 접근 가능성과 검색 제외 여부를 감사하는 방법을 소개합니다.
핵심 포인트
- noindex는 검색 엔진 노출을 막을 뿐, URL 접근 자체를 차단하지 않음
- 공유 URL 감사 시 HTTP 상태 코드(200 vs 401) 확인이 필수적임
- Python 표준 라이브러리를 활용해 공유 링크의 재고 조사를 자동화할 수 있음
- Claude 공유 채팅 등 서비스 이용 시 민감 정보 포함 여부를 주기적으로 점검해야 함
사실, noindex가 붙은 공유 URL도 「비공개」가 아니다. URL을 아는 사람은 열 수 있고, 사내 Wiki나 티켓에 붙여두면 평범하게 도달할 수 있다.
Claude의 공유 채팅은 공유 시점까지의 대화와 Artifact를 링크를 아는 사람이 열람할 수 있는 사양이다. Anthropic의 도움말에도 공유된 대화는 Settings > Privacy에서 목록을 확인하고, Unshare로 직접 링크를 중단할 수 있다고 되어 있다. 링크를 발행했을 뿐이라고 생각할 수도 있지만, 암호나 고객 정보가 남아있지는 않은지 별도로 확인할 필요가 있다.
나는 공유 링크의 재고 조사(Inventory)를 할 때, 검색 제외 여부와 HTTP 도달 가능성을 동일한 CSV에 출력하도록 하고 있다. 봐야 할 것은 URL의 길이가 아니라, 200이 반환되는지 여부이다.
urls.txt에 1행 1URL로 나열한다. 인증이 필요한 URL을 커맨드 라인 인자(Command line argument)로 직접 쓰지 않는 이유는 셸 히스토리(Shell history)에 남기고 싶지 않기 때문이다.
# urls.txt
다음 내용을 share_url_audit.py로 저장한다. 표준 라이브러리만으로 동작한다.
from __future__ import annotations
import argparse
import csv
...
python3 share_url_audit.py urls.txt > shared_urls.csv
방금 200이면서 robots meta가 통상적인 값, 200이면서 X-Robots-Tag: noindex, 401의 3가지 케이스를 테스트용 응답으로 흘려보냈다. 분기는 다음과 같다.
200 / index, follow -> 공유 중・검색 제외 없음
200 / X-Robots-Tag:noindex -> 공유 중・검색 제외 있음
401 -> 도달 불가
noindex는 검색 엔진에 올리지 않기 위한 지시이다. 열람자를 막는 기능이 아니다. 200이 반환되는 URL이라면, 링크를 전달받은 사람이나 링크를 아는 사람은 읽을 수 있다. robots.txt도 마찬가지로 액세스 제어(Access control)에는 사용할 수 없다.
공유해도 괜찮은 설계 메모라면 「공유 중・검색 제외 있음」 상태여도 문제없을 것이다. 대화 로그, API 키, 첨부 파일이 섞여 있는 것은 401/403으로 만들거나, 서비스 측에서 Unshare 하여 링크 자체를 무효화한다. Claude의 공유 채팅이라면 Settings > Privacy의 Shared chats에서 확인하여 Unshare 한다. 공유된 스냅샷에는 공유 전의 메시지와 Artifact가 포함된다는 점도 잊기 쉽다. 참조: Anthropic Privacy Center: Sharing and Unsharing Chats
공유 URL의 감사는 검색 결과만 보고 끝내면 놓치게 된다. 먼저 HTTP 200인지, 그다음 검색 제외가 있는지, 마지막으로 그 공개 범위가 정말로 충분한지를 나누어 확인한다. 나는 릴리스 전과 외부 공유를 늘린 주에 이 CSV의 차분(Diff)을 확인하고 있다. noindex를 「비공개」라고 읽지 않는 것만으로도, 공유 기능을 사용할 때의 판단이 상당히 달라진다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기