CSP 해시 생성기
Content-Security-Policy로 화이트리스트하려는 인라인 <script>·<style>의 sha256/384/512 base64 해시 계산.
해시할 내용 붙여넣기.
브라우저는 인라인 요소의 정확한 바이트 해시. 공백·들여쓰기·줄바꿈 모두 영향.
사용법
- 스크립트 본문(<script>와 </script> 사이 전부) 또는 스타일 본문 붙여넣기.
- 알고리즘 선택(거의 모두 sha256으로 충분; 정책이 요구하면 384/512).
- 결과 'sha256-…' 토큰을 해당 -src 디렉티브에 복사.
자세한 설명
펼치기접기
인라인 스크립트나 스타일의 내용을 그대로 붙여 넣으면, Content-Security-Policy가 허용 목록 항목으로 받아들이는 'sha256-…' 토큰이 나옵니다. CSP에서는 SHA-256, SHA-384, SHA-512가 모두 유효합니다. 해시는 UTF-8 바이트에 대해 계산한 뒤 base64로 인코딩되는데, 브라우저가 파싱 시점에 비교하기 전에 하는 일과 정확히 같습니다.
바이트 단위 비교이기 때문에 바이트를 바꾸는 모든 것이 해시를 바꿉니다. 요소의 텍스트 내용만 붙여 넣으세요. <script> 태그도, 실제로는 존재하지 않는 주변 들여쓰기도 넣으면 안 됩니다. CRLF 줄바꿈으로 저장된 파일은 같은 내용을 LF로 저장한 파일과 해시가 다르고, 편집기가 조용히 덧붙인 마지막 줄바꿈 하나도 CSP에게는 다른 스크립트입니다. 확실하다고 생각한 해시가 맞지 않는다면, 범인은 거의 언제나 양 끝의 공백이거나 빌드 어딘가의 줄바꿈 변환입니다.
해시 계산보다 사람들을 더 놀라게 하는 정책 차원의 동작이 하나 있습니다. script-src에 해시나 논스를 하나라도 추가하면 브라우저는 같은 지시문 안의 'unsafe-inline'을 무시합니다. 그 대체 값은 해시를 이해하지 못하는 구형 브라우저를 위해서만 남아 있습니다. 그러니 해시를 "추가로" 적어 두고 인라인 스크립트도 계속 돌아가게 할 수는 없습니다. 첫 해시가 등장하는 순간, 모든 인라인 스크립트에 해시가 필요해집니다. 이것이 의도된 이행 경로이고, 해시를 절반만 도입한 정책이 1분 전까지 잘 되던 페이지를 망가뜨리는 이유이기도 합니다.
해시가 모든 인라인을 덮을 수 있는 것도 아닙니다. onclick= 속성과 javascript: URL도 인라인 스크립트이지만 텍스트 내용을 가진 요소가 아니므로 어떤 해시와도 맞지 않습니다. CSP 레벨 3이 바로 그 경우를 위해 'unsafe-hashes'를 추가했는데, 이름 자체가 충분한 경고입니다. 가능하다면 핸들러를 해시가 걸린 스크립트 블록 안으로 옮기세요. 이 생성기는 웹 크립토 API를 통해 전적으로 브라우저 안에서 동작하므로, 아직 공개할 준비가 되지 않은 스크립트가 해시를 낸다고 해서 공개되지는 않습니다.
자주 묻는 질문
공백·줄바꿈 중요?
예 — 브라우저는 요소의 리터럴 바이트를 해시. 끝 줄바꿈이나 다른 들여쓰기는 해시 무효화. 태그 사이의 정확한 내용 그대로 붙여넣기.
항상 sha512 써야?
아니. sha256이 사실상의 기본; sha384/sha512는 정책·감사가 명시할 때만 필수. 더 긴 다이제스트가 여기서 실질적 보안 추가 안 함 — 위협 모델은 인라인 콘텐츠가 작성자 것이라 가정.
해시와 논스 중 무엇을 써야 하나?
내용이 절대 바뀌지 않는 스크립트에는 해시가 맞다. 한 번 계산해서 정적 헤더에 붙여두면 되기 때문이다. 요청마다 생성되는 것에는 논스가 맞다. 서버가 응답마다 새로 만든 무작위 값을 헤더와 태그 양쪽에 써 넣는 방식이다. 논스가 절대 하지 말아야 할 일은 재사용되거나 예측 가능해지는 것이다. 응답을 넘어 살아남는 논스는 이 정책이 막으려던 바로 그 주입을 허용한다.
배포 후에 해시가 안 맞는다. 뭐가 바뀐 건가?
거의 확실히 스크립트의 바이트가 바뀌었다. 변수 이름을 바꾸는 압축기, 템플릿을 다시 쓰는 빌드 단계, 탭에서 공백으로의 변경, 편집기가 붙인 마지막 줄바꿈까지 — 동작이 똑같아도 모두 다른 다이제스트를 만든다. 편집하는 소스가 아니라 실제로 배포되는 텍스트에서, 빌드 단계로 해시를 생성하라.
관련 도구
Content-Security-Policy 빌더
디렉티브별 소스 리스트로 CSP 헤더 빌드, 3개 시작 프리셋·위험한 와일드카드 실시간 경고.
네트워크
DNSSEC 계산기 — DS 레코드와 NSEC3 해시
DNSKEY를 등록기관이 요구하는 DS 레코드로 바꿉니다. 키 태그와 세 가지 다이제스트 종류 전부, 또는 NSEC3 방식으로 이름을 해시합니다.
네트워크
해시 생성기 (SHA)
텍스트로 SHA-1·SHA-256·SHA-384·SHA-512 해시를 생성하세요.
개발
파일 해시 (체크섬)
어떤 파일이든 SHA-1·SHA-256·SHA-512 체크섬을 계산하세요.
파일
Git 객체 ID 계산기 (hash-object)
blob·tree·commit·tag의 git 객체 ID를 SHA-1과 SHA-256으로 계산하고, git이 해시하는 헤더와 루스 객체 경로까지 보여줍니다.
개발
파일 해시 검증
파일 드롭 + 기대 SHA-1/256/384/512 붙여넣기 → 실제 해시 일치 검증. 다운로드한 바이너리 설치 전에 유용.
파일