CSP는 서버 응답 헤더를 통해 브라우저가 스크립트, 스타일, 이미지 등 특정 콘텐츠를 허용된 출처로부터만 로드하도록 명시적으로 제어하여 인젝션 공격의 피해를 최소화합니다. CSP의 엄격성은 웹사이트 보안 요구사항에 따라 다양하게 적용될 수 있습니다.
기존 Ruby on Rails 프로젝트에 CSP를 도입 시, Rails의 기본 정책(인라인 스크립트/스타일 및 eval()
차단, nonce
사용)부터 시작합니다. 초기에는 ‘보고 전용 모드(report-only mode)’를 사용하여 실제 환경에서 발생할 정책 위반을 모니터링(Report URI 등 활용)하고 문제점을 파악합니다. 이후 HTTP/HTTPS 문제, 브라우저 특정 문제(Safari Blob), 인라인 스크립트/스타일 재작성, 오래된 의존성 업데이트 등 식별된 문제들을 반복적으로 수정해야 합니다. 이 과정은 상당한 시간과 노력을 요구합니다.
더 엄격한 정책을 위해 두 가지 주요 접근 방식이 있습니다. 첫째, 도메인별 제한은 사용되는 모든 유효 도메인을 허용 목록에 추가하는 방식입니다. 이는 구현이 빠르나, 스크립트 업로드 도메인 관리 등 보안 취약점에 유의해야 합니다. 둘째, Strict Dynamic 방식은 nonce
로 명시적으로 허용된 스크립트만 로드되도록 하여 가장 강력한 보안을 제공합니다. 그러나 모든 스크립트가 특정 방식(예: Rails 헬퍼)으로 추가되어야 하므로 상당한 재작업이 필요하며, Hotwire나 정적 페이지에서는 복잡성이 증가할 수 있습니다.