CSP와 SRI: 실행 정책과 파일 무결성을 분리해 적용하기
CSP는 페이지에서 허용할 실행·가져오기 동작을 제한하고, SRI는 지정한 파일의 해시를 확인합니다. nonce 생성, eval 정책, 교차 출처 CORS, 단계적 적용의 경계를 구분합니다.
발행·오류 제보: infostoa · 편집 기준
이 글의 개별 작성자와 전문 검토자 정보는 제공되지 않습니다.
Content Security Policy(CSP)는 페이지가 가져오거나 실행할 수 있는 리소스와 코드 동작을 제한합니다. Subresource Integrity(SRI)는 지정한 스크립트나 스타일 파일이 선언한 해시와 일치하는지 확인합니다. CSP는 정책 경계, SRI는 특정 파일의 바이트 검증입니다. 둘 다 입력 검증과 출력 인코딩, 안전한 배포를 대신하지 않습니다. CSP Level 3 명세 SRI 명세
CSP nonce는 요청마다 새로 만든다
인라인 스크립트를 허용해야 한다면 서버가 요청마다 예측하기 어려운 nonce를 생성하고, 같은 값을 응답 헤더와 허용할 <script> 요소에 넣을 수 있습니다. 현재 CSP Level 3 문서는 작업 초안이며, nonce는 매 정책 전송마다 고유해야 하고 최소 128비트 길이를 권고합니다. 아래 중괄호 부분은 서버가 매 응답마다 안전한 난수로 바꿔야 하는 자리표시자입니다. 고정 문자열을 복사해 쓰면 nonce의 목적을 잃습니다. nonce 요구사항
Content-Security-Policy: default-src 'self'; script-src 'nonce-{{REQUEST_NONCE}}'; object-src 'none'; base-uri 'none'
<script nonce="{{REQUEST_NONCE}}">/* 허용할 인라인 코드 */</script>
{{REQUEST_NONCE}}는 두 위치에서 같은 응답별 값이어야 합니다. 템플릿에 고정된 값을 넣거나 페이지 캐시로 다른 사용자에게 재사용하지 마세요. 외부 스크립트가 필요하면 허용 출처, nonce와 SRI 사용 여부를 별도로 검토합니다. nonce는 eval() 허가가 아닙니다. 문자열 코드를 실행하는 eval() 계열은 script-src의 'unsafe-eval' 정책을 따르므로, nonce를 붙여 우회하려 하지 마세요. script-src 지침
SRI는 외부 파일의 예상 해시를 고정한다
버전이 고정된 CDN 파일을 쓸 때 빌드나 공급자가 제공한 해시를 HTML에 기록할 수 있습니다. 브라우저는 내려받은 내용이 맞지 않으면 리소스를 적용하지 않습니다. 교차 출처 리소스는 CORS로 요청해야 하므로 crossorigin="anonymous"를 함께 둡니다. 해시가 바뀌면 파일과 해시를 함께 검토·배포해야 합니다. SRI의 사용 조건
<script src="https://cdn.example.com/lib-1.2.3.js"
integrity="sha384-{{GENERATED_BASE64_DIGEST}}"
crossorigin="anonymous"></script>
이 코드는 자리표시자 예시입니다. 실제 파일의 정확한 해시와 CDN의 CORS 응답을 확인하기 전에는 배포할 수 없습니다. SRI 해시는 파일이 예상한 바이트와 같은지 확인할 뿐, 그 코드가 처음부터 안전하거나 최신이라는 인증서는 아닙니다.
안전하게 시험하고 적용하기
먼저 현재 페이지가 실제로 불러오는 스크립트와 인라인 코드를 조사합니다. Content-Security-Policy-Report-Only 헤더로 후보 정책을 관찰하면 기존 동작을 차단하지 않고 위반을 살펴볼 수 있습니다. 보고 수집 경로가 동작하는지와 보고 내용의 민감성을 점검한 뒤, 정책을 좁히고 테스트 환경에서 강제 적용합니다. Report-Only는 정책을 차단하지 않는 관찰 단계이지, 보호가 켜졌다는 뜻이 아닙니다. W3C 명세상 이 헤더는 HTML <meta>로 대체할 수 없으며 HTTP 응답 헤더로 보내야 합니다. Report-Only 동작
배포 전에는 nonce가 매 응답에서 바뀌는지, 헤더와 HTML 값이 일치하는지, 필요한 스크립트만 실행되는지, SRI 해시가 배포 파일과 일치하는지 확인합니다. CSP와 SRI는 서로 다른 실패를 다룹니다. CSP 위반은 필요한 기능을 막을 수 있고 SRI 불일치는 파일 실행을 거부할 수 있으므로 롤백과 갱신 절차도 정해 두세요.
출처
- W3C, Content Security Policy Level 3 — CSP nonce, script-src, Report-Only 규칙. 2026년 9월 16일 작업 초안.
- W3C, Subresource Integrity — 파일 무결성 검증 명세.
- MDN, CSP script-src — nonce 및 eval 실행 정책의 실무 참고.
- MDN, Subresource Integrity — 교차 출처 요청과
crossorigin조건.