최근 웹 보안 스캔을 돌리면 아래와 같은 항목들이 거의 필수처럼 뜬다.
- Security Misconfiguration (CWE-693)
- OWASP Top 10 – A5: Security Misconfiguration
- HSTS 없음
- CSP 없음
- X-Frame-Options 없음
- 업로드 경로 노출
- robots.txt 민감 경로 노출 등
처음 보면 “문제가 한가득”처럼 보이지만, 모든 경고가 실제 취약점은 아니다.

실제로 위험했던 것과 점수용/권장사항이었던 것을 구분하고 운영 서버에서 실제로 적용한 설정을 정리한다.
기술적인 내용은 ChatGtp로 확인하면서 작업을 했다.
진짜로 위험했던 것들
① HSTS 미설정
HSTS는 브라우저가 HTTPS만 사용하도록 강제하는 헤더다.
- 공공 Wi-Fi, 프록시 환경에서
- 최초 HTTP 접속 시 중간자 공격(MITM) 가능성 존재
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" always;
✔ HTTPS 강제
✔ 서브도메인 포함
✔ 실질적인 공격 벡터 차단
② Content-Security-Policy(CSP) 미설정
CSP는 XSS를 “없애는” 건 아니지만, XSS가 터졌을 때 피해를 크게 줄여준다.
다만 CSP를 바로 강제(enforce)하면 CDN, 외부 스크립트, 레거시 코드 등이 깨질 수 있다.
add_header Content-Security-Policy-Report-Only "default-src 'self'; base-uri 'self'; object-src 'none'; frame-ancestors 'self'; form-action 'self'" always;
✔ 차단 없이 리포트만
✔ 서비스 영향 없음
✔ “CSP 없음” 지적 해소
③ X-Frame-Options 미설정 (클릭재킹)
관리자 페이지, 설정 페이지가 있는 서비스라면 클릭재킹은 실제 공격 가능하다.
add_header X-Frame-Options "SAMEORIGIN" always;
보안 품질을 높이기 위한 필수 헤더들
① MIME 스니핑 방지
add_header X-Content-Type-Options "nosniff" always; ② 브라우저 권한 최소화
add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always; ③ Referrer 정책
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
업로드 디렉토리와 민감 경로 처리 (중요)
robots.txt에 특정 경로가 있었고, robots.txt는 보안 기능이 아닌 공격자에게는 “여기 봐라”라고 알려주는 힌트일 뿐이다.
웹에서 쓸 이유 없는 경로는 존재 자체를 숨겼다.
deny all;에서 return 404;로 변경
✔ 존재 숨김
✔ 스캐너/봇 탐색 차단
✔ 공격 표면 최소화
TLS / SSL 관련 지적에 대한 판단
스캔 결과에 아래 같은 항목도 있었다.
- TLS 1.2 CBC cipher WEAK
- OCSP Stapling 없음
- HSTS Preload 아님
이들은 즉각적인 보안 사고와 직결되지는 않으며, 주로 점수/품질/정책 대응용이라 필요하면 개선할 수 있지만 “취약점”으로 보긴 어렵다.
최종 상태 요약
✔ HSTS 정상 적용
✔ 필수 보안 헤더 전부 적용
✔ CSP는 Report-Only로 안전하게 운영
✔ 업로드/민감 경로 외부 접근 완전 차단
✔ robots.txt로 인한 실질 위험 제거
스캐너가 지적한 “문제가 된다”는 항목들은 모두 해결했고 남은 건 점수 개선용 선택 사항뿐
마무리
보안 스캔 결과를 그대로 믿고 전부 막아버리면 서비스가 깨지거나 운영이 어려워진다.
중요한 건 “이게 실제 공격으로 이어질 수 있는가?”
그 기준으로 보면, 막아야 할 것과 나중에 해도 될 것으로 명확하게 구분된다.