W3C가있다라는 HTML5.1에 새로운 속성 말한다 nonce
에 대한이 style
와 script
그이 웹 사이트의 콘텐츠 보안 정책을 사용할 수 있습니다.
나는 그것에 대해 봤지만 마침내이 속성이 무엇을하고 그것을 사용할 때 어떤 변화를 얻지 못했습니까?
script
와 style
? 핫 링크 금지 같은 것?
W3C가있다라는 HTML5.1에 새로운 속성 말한다 nonce
에 대한이 style
와 script
그이 웹 사이트의 콘텐츠 보안 정책을 사용할 수 있습니다.
나는 그것에 대해 봤지만 마침내이 속성이 무엇을하고 그것을 사용할 때 어떤 변화를 얻지 못했습니까?
script
와 style
? 핫 링크 금지 같은 것?
답변:
이 nonce
속성을 사용하면 CSP 지시문 ( 모든 인라인 /을 허용 함)을 사용하지 script
않고 특정 인라인 및 style
요소 를 "화이트리스트에 추가" unsafe-inline
할 수 있으므로 인라인 / 일반적으로 허용하지 않는 주요 CSP 기능을 계속 유지할 수 있습니다 .script
style
script
style
따라서 nonce
속성은 특정 스크립트 또는 스타일 요소의 인라인 내용이 일부 (악의적 인) 제 3 자에 의해 문서에 주입되지 않고 대신 문서를 제공하는 서버를 제어하는 사람이 의도적으로 문서에 넣었다는 것을 브라우저에 알리는 방법입니다 에서.
https://developers.google.com/web/fundamentals/security/csp/#if_you_absolutely_must_use_it 는 nonce
다음 단계에 해당 하는 속성 을 사용하는 방법에 대한 좋은 예를 제공 합니다.
웹 서버가 특정 문서에 대해 수신하는 모든 요청에 대해 백엔드가 암호로 안전한 난수 생성기에서 128 비트 이상의 데이터로 구성된 임의의 base64 인코딩 문자열을 생성하도록하십시오. 예를 들어, EDNnf03nceIOfn39fn3e9h3sdfa
. 그게 너의 논 스야.
1 단계에서 생성 된 nonce를 가져 와서 인라인 script
/ style
화이트리스트에 추가하려는 경우 백엔드 코드 nonce
가 문서를 전송하기 전에 문서에 속성을 삽입하고 해당 nonce를 값으로 설정하십시오.
<script nonce="EDNnf03nceIOfn39fn3e9h3sdfa">…</script>
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
.
nonce
속성 을 사용하기 위해 노력해야하는 이유가 있다면 절대로 사용할 필요가 없다면 사용하지 마십시오. 그것은 실제로 어떤 이유로 특정 문서에서 일부 인라인 스크립트 또는 스타일 내용을 제거 할 수없는 경우에만 의미가 있습니다 (그러나 나중에 제거해야 함). 따라서 어떤 이유로 인라인 스크립트와 스타일 내용을 유지해야 할 필요가 있다면 적어도 nonce 메커니즘을 사용하여 브라우저가 정상인지 확인하도록 할 수 있습니다. 그렇지 않으면 실제로 의도 한대로 CSP를 완전히 사용해야하며 인라인 스크립트 나 스타일 요소를 허용하지 않아야합니다.
<script type="text/javascript" nonce>
와<style type="text/css" nonce>