From 8ab597cf43231c882517e5a5af60c063409cb676 Mon Sep 17 00:00:00 2001 From: seonghobae <8172694+seonghobae@users.noreply.github.com> Date: Fri, 17 Jul 2026 20:46:41 +0000 Subject: [PATCH] =?UTF-8?q?=EB=B3=B4=EC=95=88:=20=EC=9D=B8=EB=8D=B1?= =?UTF-8?q?=EC=8A=A4=20=ED=8C=8C=EC=9D=BC=20=EA=B5=90=EC=B2=B4=20=EC=8B=9C?= =?UTF-8?q?=20=EC=9B=90=EC=9E=90=EC=A0=81=20=EC=9D=B4=EB=8F=99(Atomic=20Mo?= =?UTF-8?q?ve)=20=EC=A7=80=EC=9B=90=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20?= =?UTF-8?q?=EC=9D=98=EC=A1=B4=EC=84=B1=20=EC=97=85=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 임시 파일에서 `index.html`로 교체할 때 `StandardCopyOption.ATOMIC_MOVE`를 사용하여 TOCTOU 및 부분 읽기 방지 - 파일 시스템 지원 불가 시 `REPLACE_EXISTING`으로 안전하게 폴백(fallback)되도록 예외 처리 구현 - `mockFilesMove`를 주입받아 예외 및 폴백을 검증하는 100% 커버리지 유닛 테스트 추가 - 알려진 보안 취약점(CVE-2020-15250) 해결을 위해 `build.gradle`에서 JUnit 4를 `4.11`에서 `4.13.2`로 업데이트 - 학습된 보안 패턴을 `.jules/sentinel.md` 저널에 기록 (한국어) --- .jules/sentinel.md | 5 +++++ build.gradle | 2 +- src/main/kotlin/html4tree/main.kt | 12 ++++++++++-- src/test/kotlin/html4tree/MainTest.kt | 27 +++++++++++++++++++++++++++ 4 files changed, 43 insertions(+), 3 deletions(-) diff --git a/.jules/sentinel.md b/.jules/sentinel.md index 6ecf72f..f4b696a 100644 --- a/.jules/sentinel.md +++ b/.jules/sentinel.md @@ -83,3 +83,8 @@ **Vulnerability:** 정적 HTML 생성 도구에서 매번 다른 Nonce를 동적으로 생성하여 CSP에 적용하는 것은, 캐싱 효율을 저하시킬 뿐만 아니라 정적 배포 환경(예: GitHub Pages 등)에서 올바른 보안 정책 수립을 방해할 수 있는 안티 패턴입니다. **Learning:** 정적으로 고정된 인라인 스타일이나 스크립트에는 난수화된 Nonce보다 콘텐츠 자체의 해시(SHA-256 등)를 사용하는 것이 안전하고 일관된 방식임을 배웠습니다. **Prevention:** 자동 생성되는 정적 HTML의 콘텐츠 보안 정책(CSP)에는 `style-src 'sha256-'` 방식을 적용하고, `