From 0cbfe666d7ce5620923d961982b0187f391f2035 Mon Sep 17 00:00:00 2001 From: AWESOMEDEV Date: Fri, 17 Jul 2026 16:23:22 +0900 Subject: [PATCH] =?UTF-8?q?fix(security):=20X-Frame-Options=20DENY?= =?UTF-8?q?=E2=86=92SAMEORIGIN=20=E2=80=94=20=ED=95=99=EC=8A=B5=20?= =?UTF-8?q?=EB=AC=B8=EC=84=9C=20iframe=20=EB=A1=9C=EB=94=A9=20=EB=B3=B5?= =?UTF-8?q?=EA=B5=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 보안 헤더 추가(0a4c769) 때 X-Frame-Options를 DENY로 걸었는데, DENY는 '어떤 사이트에서도 iframe 금지'라 우리 자신의 iframe(DocViewerPage가 학습 문서를 표시하는 방식)까지 막아 '연결 거부'로 문서가 안 떴다. SAMEORIGIN(같은 출처끼리는 허용)으로 변경 — 클릭재킹 방어는 그대로 유지. 원인·교훈을 Caddyfile 주석에 기록. Caddy 재기동만으로 반영(재빌드 불필요). 검증: 문서 헤더 SAMEORIGIN, SPA도 헤더 유지, intern-guide 문서 iframe 정상 로딩. Co-Authored-By: Claude Opus 4.8 --- deploy/Caddyfile | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/deploy/Caddyfile b/deploy/Caddyfile index 52ac2e5..6400889 100644 --- a/deploy/Caddyfile +++ b/deploy/Caddyfile @@ -12,8 +12,11 @@ header { # HTTPS만 쓰라고 브라우저에 각인 (1년) — 평문 접속·다운그레이드 공격 차단 Strict-Transport-Security "max-age=31536000; includeSubDomains" - # 다른 사이트가 우리 화면을 iframe에 넣는 것 금지 → 클릭재킹 방어 - X-Frame-Options "DENY" + # 다른 사이트가 우리 화면을 iframe에 넣는 것 금지 → 클릭재킹 방어. + # ⚠️ DENY(전면 금지)가 아니라 SAMEORIGIN(같은 사이트끼리는 허용)이어야 한다 — + # 학습 문서 뷰어(DocViewerPage)가 우리 문서를 우리 iframe으로 띄우기 때문이다. + # DENY로 두면 우리 문서조차 "연결 거부"로 안 뜬다(실제로 그 버그가 났었다). + X-Frame-Options "SAMEORIGIN" # 브라우저가 파일 종류를 멋대로 추측(MIME 스니핑)하지 못하게 X-Content-Type-Options "nosniff" # 다른 사이트로 이동할 때 우리 주소(경로)를 흘리지 않음