스크립트 및 스타일 요소에 대한 HTML“nonce”속성의 목적은 무엇입니까? 콘텐츠 보안 정책을 사용할 수 있습니다. 나는

W3C가있다라는 HTML5.1에 새로운 속성 말한다 nonce에 대한이 stylescript그이 웹 사이트의 콘텐츠 보안 정책을 사용할 수 있습니다.

나는 그것에 대해 봤지만 마침내이 속성이 무엇을하고 그것을 사용할 때 어떤 변화를 얻지 못했습니까?



답변

nonce속성을 사용하면 CSP 지시문 ( 모든 인라인 /을 허용 함)을 사용하지 script않고 특정 인라인 및 style요소 를 “화이트리스트에 추가” unsafe-inline할 수 있으므로 인라인 / 일반적으로 허용하지 않는 주요 CSP 기능을 계속 유지할 수 있습니다 .scriptstylescriptstyle

따라서 nonce속성은 특정 스크립트 또는 스타일 요소의 인라인 내용이 일부 (악의적 인) 제 3 자에 의해 문서에 주입되지 않고 대신 문서를 제공하는 서버를 제어하는 ​​사람이 의도적으로 문서에 넣었다는 것을 브라우저에 알리는 방법입니다 에서.

https://developers.google.com/web/fundamentals/security/csp/#if_you_absolutely_must_use_itnonce다음 단계에 해당 하는 속성 을 사용하는 방법에 대한 좋은 예를 제공 합니다.

  1. 웹 서버가 특정 문서에 대해 수신하는 모든 요청에 ​​대해 백엔드가 암호로 안전한 난수 생성기에서 128 비트 이상의 데이터로 구성된 임의의 base64 인코딩 문자열을 생성하도록하십시오. 예를 들어, EDNnf03nceIOfn39fn3e9h3sdfa. 그게 너의 논 스야.

  2. 1 단계에서 생성 된 nonce를 가져 와서 인라인 script/ style화이트리스트에 추가하려는 경우 백엔드 코드 nonce가 문서를 전송하기 전에 문서에 속성을 삽입하고 해당 nonce를 값으로 설정하십시오.

    <script nonce="EDNnf03nceIOfn39fn3e9h3sdfa"></script>
  3. 1 단계에서 생성 된 nonce를 가져 와서 앞에 추가 nonce-하고 백엔드가 script-src또는 에 대한 소스 목록 값 중 CSP 헤더를 생성하도록하십시오 style-src.

    Content-Security-Policy: script-src 'nonce-EDNnf03nceIOfn39fn3e9h3sdfa'

따라서 nonce를 사용하는 메커니즘은 백엔드가 인라인 내용의 해시를 생성 하도록 허용 script하거나 style허용하려는 경우 CSP 헤더의 적절한 소스 목록에 해시를 지정하는 대신 사용할 수 있습니다.

브라우저는 페이지 요청간에 전송 된 nonce 값이 변경되었는지 확인할 수 없기 때문에 (전혀 바람직하지는 않지만) 위의 1을 건너 뛰고 백엔드가 nonce에 대해 동적으로 작업을 수행하지 않도록 할 수 있습니다. 그냥 둘 수 있었다 nonce당신의 문서의 HTML 소스에 정적 값 속성을, 그 같은 넌스 값을 정적 CSP 헤더를 보냅니다.

그러나 정적 nonce를 사용하지 않으려는 이유는 정적 nonce를 사용하려는 경우 nonce를 사용하는 전체 목적을 거의 물리 치지 않기 때문입니다. 이 시점에서을 사용하고있을 수도 있습니다 unsafe-inline.