CSP는 서버 응답 헤더를 통해 브라우저가 로드할 수 있는 리소스(스크립트, 이미지, 스타일 등)의 출처를 명시적으로 지정하여 웹사이트 보안을 강화합니다. 기존 Ruby on Rails 프로젝트에 CSP를 도입할 때는 Rails 기본 정책으로 시작하며, 초기에는 ‘report-only’ 모드를 통해 정책 위반 사항을 식별합니다. 이 보고서를 기반으로 HTTP 리소스, eval()
사용, 인라인 JavaScript/CSS 등 발견된 문제점들을 수정해야 합니다. 특히 인라인 스크립트에는 서버에서 생성된 nonce
값과 함께 사용해야 신뢰성을 확보할 수 있습니다.
CSP 정책 강화에는 두 가지 주요 방식이 있습니다. 첫째, 도메인 기반 제한은 허용된 모든 도메인을 명시하는 방식입니다. 구현은 용이하나 서드파티 스크립트 관리에 주의가 필요합니다. 둘째, Strict Dynamic 방식은 nonce
를 통해 명시적으로 허용된 스크립트만 로드되도록 하는 가장 엄격한 정책입니다. 이는 최고 보안 수준을 제공하지만, 애플리케이션 내 모든 스크립트 로딩 방식을 nonce
기반으로 대대적으로 리팩토링해야 하므로 상당한 개발 노력이 필요합니다. Hotwire 같은 Rails 프론트엔드나 정적 페이지에서 구현이 복잡할 수 있으며, CSP 적용은 지속적인 문제 해결과 검증을 요구하는 과정입니다.