본문으로 건너뛰기

SRI 해시 생성

Subresource Integrity Hash

붙여넣거나 올린 스크립트·스타일시트의 Subresource Integrity 속성(sha256/384/512)을 계산합니다.

CDN을 가리키는 `<script src>`는 그 CDN이 사용자 브라우저에서 어떤 코드든 실행해도 좋다는 상시 허가입니다. Subresource Integrity 속성은 그 허가를 거둡니다. 지정한 해시와 다른 파일이면 브라우저가 실행을 거부합니다.

⚡ 로컬 처리, 필요하면 서버 보조sriintegritywebhash

배포할 파일을 그대로 놓으세요

실제로 서비스할 스크립트나 스타일시트여야 합니다. 있는 그대로 해시합니다.

브라우저의 WebCrypto로 해시하며, 브라우저가 검사할 때 쓰는 것과 같은 다이제스트입니다. 주소 입력란을 일부러 두지 않았습니다. 이 페이지에서 원격 파일을 받아 해시하려면 CORS에 막히거나 SSRF 통로가 되고, 브라우저는 서버처럼 호스트를 해석한 뒤 고정할 수 없습니다. 실제로 배포할 파일을 넣으십시오.

사용 방법

  1. 파일이나 주소를 넣습니다

    실제로 배포할 파일을 놓거나 주소로 받아 옵니다. 해시는 바이트를 대상으로 하므로 줄바꿈 하나만 달라도 다른 값이 나옵니다.

  2. 속성 전체를 복사합니다

    결과는 `integrity="sha384-…"` 형태입니다. 태그에 붙이면서 `crossorigin="anonymous"`도 함께 넣으십시오. 이것이 없으면 교차 출처 자원은 불투명해서 무결성을 검사할 수 없습니다.

  3. 움직이는 태그가 아니라 버전을 고정합니다

    `@latest` 주소에 무결성 속성을 걸면 CDN이 새 버전을 올리는 날 사이트가 멈춥니다. 정확한 버전을 가리키고 둘을 함께 갱신하십시오.

자주 묻는 질문

어떤 알고리즘을 써야 하나요?

sha384가 통상적인 선택이고 대부분의 CDN이 그렇게 공개합니다. sha256도 되고 sha512는 더 강하지만, 이 설계에서 약한 고리는 알고리즘이 아니라 잘못된 버전을 고정하는 일입니다.

속성을 넣었더니 스크립트가 안 불러와집니다.

거의 항상 셋 중 하나입니다. CDN에서 파일이 바뀌었거나, `crossorigin="anonymous"`가 빠졌거나, 실제 제공되는 것과 다른 빌드(압축본과 비압축본 같은)에서 해시를 뜬 경우입니다.

원래부터 악성이던 스크립트도 SRI로 막히나요?

막히지 않습니다. 고정한 바이트를 그대로 받는다는 보장일 뿐입니다. 고정한 버전에 이미 뒷문이 있었다면 SRI는 그 뒷문을 매번 충실히 전달합니다.

이 도구로 이어지는 것

다음 단계

이 도구의 결과를 그대로 받을 수 있는 도구들입니다.