📝 주석문 내 시스템 주요정보 노출 KISA A-2 · 주석문 안에 포함된 주요정보

화면에 렌더된 페이지는 깔끔해 보이지만, 누구나 "소스 보기"로 볼 수 있는 HTML/JS 소스에는 개발자가 남긴 주석이 DB 자격증명·API 키·내부 관리 URL·"테스트용 인증 비활성" TODO를 노출합니다. 주석은 비밀 저장소가 아닙니다.

① 고객 페이지 (겉보기엔 정상) VULNERABLE

피해자가 보는 화면입니다. 이제 소스 보기를 누르세요 — 공격자가 Ctrl+U로 하는 것과 동일하며, 서버가 실제로 보낸 원시 바이트를 읽습니다.
https://shop.example/account

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에서만 렌더됩니다. 실제 소스·키·시스템은 사용하지 않습니다.