📝 주석문 내 시스템 주요정보 노출 KISA A-2 · 주석문 안에 포함된 주요정보
화면에 렌더된 페이지는 깔끔해 보이지만, 누구나 "소스 보기"로 볼 수 있는 HTML/JS 소스에는 개발자가 남긴 주석이 DB 자격증명·API 키·내부 관리 URL·"테스트용 인증 비활성" TODO를 노출합니다. 주석은 비밀 저장소가 아닙니다.
① 고객 페이지 (겉보기엔 정상) VULNERABLE
피해자가 보는 화면입니다. 이제 소스 보기를 누르세요 — 공격자가 Ctrl+U로 하는 것과 동일하며, 서버가 실제로 보낸 원시 바이트를 읽습니다.
My Account
② 강화된 빌드: 주석 제거, 비밀은 서버측 SECURE
운영 빌드는 모든 주석/개발 TODO를 제거하고 출력을 minify합니다. 비밀은 서버측 설정이나 시크릿 매니저에만 존재하고 클라이언트로 전송되지 않습니다. 동일한 "비밀 추출" 스캔이 이제 아무것도 찾지 못합니다.
③ 취약 vs 안전 소스
VULNERABLE
<!-- TODO: remove before prod --> <!-- DB: mysql://root:Pa$$w0rd@10.0.0.5:3306/shop --> <!-- admin panel: /internal/admin?debug=1 --> <script> // FIXME: temp key, rotate later const STRIPE_KEY = "sk_live_51HxQ...REDACTED"; // if(env==="test") skipAuth(); // 인증 우회 디버그 </script>
SECURE
<!-- (build step removed all comments) -->
<script>
// 비밀 없음. 서버 환경변수로만 사용
// 결제는 서버측 endpoint가 STRIPE_KEY 보관
fetch("/api/checkout", {method:"POST"});
</script>
# 서버: .env / Secret Manager
STRIPE_KEY=... # 클라이언트로 절대 전송 안 함
방어 핵심: 운영 빌드에서 주석·소스맵 제거 · 자격증명/키/내부 URL을 클라이언트 코드에 두지 말 것 · 비밀은 env/시크릿 매니저 보관 · 비밀은 서버측에 두고 인증된 API로 호출 · CI에서 secret-detection(gitleaks/trufflehog) 스캔.
⚠️ 교육용 시뮬레이션입니다. 모든 "비밀"은 가상의 더미 값이며 페이지 내부 mock에서만 렌더됩니다. 실제 소스·키·시스템은 사용하지 않습니다.