스크립트 및 스타일 요소에 대한 HTML“nonce”속성의 목적은 무엇입니까?


140

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

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


2
사이트의 보안을 강화하는 것 같습니다. 링크 나 양식에 추가하고 페이지가 제공 될 때 nonce가 귀하와 일치하지 않으면 해당 페이지를 제공하지 않습니다
Pete

그러면 아무도 당신의로드 없었다 의미 @Pete scriptstyle? 핫 링크 금지 같은 것?
ata

또한 일반 페이지 및 양식 유효성 검사를위한 것입니다.
Pete

답변:


195

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.


17
사용자를 확인하기위한 것이 아닙니다. 특정 스크립트 또는 스타일 요소의 인라인 내용이 제 일부 (악의적 인) 제 3 자 문서에 삽입되지 않았지만 서버를 문서를 제어하는 ​​사람이 의도적으로 문서에 삽입했는지 확인하기위한 것입니다. 에서 제공됩니다. (내 대답을 업데이트하여 말하겠습니다.)
sideshowbarker

3
nonces는 메모리에 생성되어 CSP 헤더와 서버 파일 시스템 / 데이터베이스에 저장된 소스가 아닌 응답으로 유선으로 전송되는 HTML 문서에 삽입되는 대신 저장 될 필요가 없습니다.
sideshowbarker

3
nonce속성 을 사용하기 위해 노력해야하는 이유가 있다면 절대로 사용할 필요가 없다면 사용하지 마십시오. 그것은 실제로 어떤 이유로 특정 문서에서 일부 인라인 스크립트 또는 스타일 내용을 제거 할 수없는 경우에만 의미가 있습니다 (그러나 나중에 제거해야 함). 따라서 어떤 이유로 인라인 스크립트와 스타일 내용을 유지해야 할 필요가 있다면 적어도 nonce 메커니즘을 사용하여 브라우저가 정상인지 확인하도록 할 수 있습니다. 그렇지 않으면 실제로 의도 한대로 CSP를 완전히 사용해야하며 인라인 스크립트 나 스타일 요소를 허용하지 않아야합니다.
sideshowbarker

2
@sideshowbarker, 비어있는 nonce는 무엇을합니까? 내가 가진 페이지를보고 있어요 <script type="text/javascript" nonce><style type="text/css" nonce>
Pacerier

7
참고 : 스크립트가 정적 인 경우 nonce가 아닌 CSP 해시를 권장합니다.
Brian
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.