html - 헤더가 - jeus content-security-policy 설정



스크립트 및 스타일 요소에 대한 HTML "nonce"속성의 용도는 무엇입니까? (1)

W3C에 따르면 HTML5.1에는 웹 사이트의 콘텐츠 보안 정책에서 사용할 수있는 stylescript 대한 nonce 라는 새 속성이 있습니다.

나는 그것에 대해 봤지만 실제로 마침내 그것을 얻지 못했고 실제로이 속성은 무엇을 사용하고 어떤 변화를 주 었는가?


nonce 속성을 사용하면 CSP unsafe-inline 지시문 ( 모든 인라인 script / style 허용)의 사용을 피하면서 특정 인라인 scriptstyle 요소를 "허용"할 수 있으므로 인라인 script 를 허용하지 않는 핵심 CSP 기능을 계속 보유 할 수 있습니다 / 일반적으로 style .

따라서 nonce 속성은 특정 스크립트 또는 스타일 요소의 인라인 내용이 일부 악의적 인 제 3자가 문서에 삽입하지 않았지만 대신 서버를 제어하는 ​​사람이 문서를 의도적으로 문서에 삽입한다는 것을 브라우저에 알리는 방법입니다 에서 봉사했다.

nonce 속성을 사용하는 방법에 대한 좋은 예가 https://developers.google.com/web/fundamentals/security/csp/#if_you_absolutely_must_use_it . 다음 단계가 있습니다.

  1. 웹 서버가 특정 문서에 대해 요청할 때마다 백엔드가 암호화 된 보안 난수 생성기에서 128 비트 이상의 데이터로 구성된 임의의 base64 인코딩 문자열을 생성하도록합니다. 예 : EDNnf03nceIOfn39fn3e9h3sdfa . 그건 너의 일이다.

  2. 1 단계에서 생성 된 nonce를 가져오고, "whitelist"하려는 모든 인라인 script / style 대해, 그 nonce를 값으로 사용하여 백엔드 코드가 문서에 nonce 속성을 삽입하도록합니다.

    <script nonce="EDNnf03nceIOfn39fn3e9h3sdfa"></script>
  3. 1 단계에서 생성 된 nonce를 취하여 nonce- 로 시작하고 backend가 script-src 또는 style-src 의 소스 목록 값 중에서 CSP 헤더를 생성하도록합니다.

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

따라서 nonce를 사용하는 메커니즘 대신 백엔드에서 허용하려는 인라인 script 또는 style 내용의 해시를 생성 한 다음 CSP 헤더의 적절한 소스 목록에 해당 해시를 지정하는 대신에 백엔드를 사용하는 방법을 사용할 수 있습니다.

브라우저는 전송 된 nonce 값이 페이지 요청 사이에서 변경된다는 것을 확인하지 못하므로 (위의 1은 건너 뛰고 백엔드는 nonce에 대해 동적으로 아무것도하지 않는 것이 좋습니다. 정적 값을 가진 nonce 속성을 문서의 HTML 소스에 넣고 동일한 nonce 값을 가진 정적 CSP 헤더를 보낼 수 있습니다.

그러나 당신이 정적 nonce를 그런 식으로 사용하고 싶지 않은 이유는, nonce를 처음부터 사용하는 전체 목적을 거의 무시할 것입니다. 왜냐하면 여러분이 정적 nonce를 사용한다면, 그 시점에서 unsafe-inline 사용할 수도 있습니다.





nonce