Content-Security-Policy (CSP) ãããã¼
Baseline
åºãå©ç¨å¯è½
*
ãã®æ©è½ã¯åºãå®è£ ããã¦ãããå¤ãã®ãã¼ã¸ã§ã³ã®ç«¯æ«ããã©ã¦ã¶ã¼ã§åä½ãã¾ãã2016å¹´8æä»¥éããã¹ã¦ã®ãã©ã¦ã¶ã¼ã§å©ç¨å¯è½ã§ãã
* ãã®æ©è½ã®ä¸é¨ã¯ã対å¿ã¬ãã«ãç°ãªãå ´åãããã¾ãã
HTTP ã® Content-Security-Policy ã¬ã¹ãã³ã¹ãããã¼ã¯ãã¦ã§ããµã¤ã管çè
ãããããã¼ã¸ã«ã¦ã¼ã¶ã¼ã¨ã¼ã¸ã§ã³ããèªã¿è¾¼ã¿ã許å¯ããããªã½ã¼ã¹ã管çã§ããããã«ãã¾ããããã¤ãã®ä¾å¤ãé¤ãã¦ã大åã®ããªã·ã¼ã«ã¯ãµã¼ãã¼ãªãªã¸ã³ã¨ã¹ã¯ãªããã¨ã³ããã¤ã³ãã®æå®ãå«ãã§ãã¾ããããã¯ã¯ãã¹ãµã¤ãã¹ã¯ãªããã£ã³ã°æ»æãé²ãã®ã«å½¹ç«ã¡ã¾ãã
ã³ã³ãã³ãã»ãã¥ãªãã£ããªã·ã¼ (CSP) ããã©ã¦ã¶ã¼ã«ã©ã®ããã«é ä¿¡ãããããã¾ãããã®å¤è¦³ããç¨éãå±éæ¦ç¥ãªã©ã詳細ã«ã¤ãã¦ã¯ãã¬ã¤ããã覧ãã ããã
| ãããã¼ç¨®å¥ | ã¬ã¹ãã³ã¹ãããã¼ |
|---|---|
| ç¦æ¢ãªã¯ã¨ã¹ããããã¼ | ããã |
æ§æ
Content-Security-Policy: <policy-directive>; <policy-directive>
ããã§ã <policy-directive> 㯠<directive> <value> ã®å½¢ã§ãããå
é¨ã«åºåãæåã¯ããã¾ããã
ãã£ã¬ã¯ãã£ã
>ãã§ãããã£ã¬ã¯ãã£ã
ãã§ãããã£ã¬ã¯ãã£ãã¯ãç¹å®ã®ãªã½ã¼ã¹ç¨®å¥ãèªã¿è¾¼ããã¨ãã§ããå ´æãå¶å¾¡ãã¾ãã
child-src-
ã¦ã§ãã¯ã¼ã«ã¼ã¨ã
<frame>ã<iframe>ã®ãããªè¦ç´ ã«ãã£ã¦èªã¿è¾¼ã¾ããå ¥ãåã®é²è¦§ã³ã³ããã¹ãã®ããã®æå¹ãªã½ã¼ã¹ãå®ç¾©ãã¾ããframe-srcããã³worker-srcã®ä»£æ¿ã¨ãªãã¾ãã connect-src-
ã¹ã¯ãªããã¤ã³ã¿ã¼ãã§ã¤ã¹ã«ãã£ã¦èªã¿è¾¼ã¾ãã URL ãå¶éãã¾ãã
default-src-
å¥ã®ãã§ãããã£ã¬ã¯ãã£ãã«å¯¾ãã代æ¿ã¨ãã¦æä¾ãã¾ãã
ä»ã®ãã¹ã¦ã®ãã§ãããã£ã¬ã¯ãã£ãã®ä»£æ¿ã¨ãªãã¾ãã
fenced-frame-src-
<fencedframe>è¦ç´ ã«èªã¿è¾¼ãå ¥ãåã«ãªã£ãé²è¦§ã³ã³ããã¹ãã®æå¹ãªã½ã¼ã¹ãæå®ãã¾ãã font-src-
@font-faceã«ãã£ã¦èªã¿è¾¼ã¾ãããã©ã³ãã®ããã®æå¹ãªã½ã¼ã¹ãæå®ãã¾ãã frame-src-
<frame>ã<iframe>ã®ãããªè¦ç´ ã«ãã£ã¦èªã¿è¾¼ã¾ããå ¥ãåã®ã³ã³ãã³ãã®é²è¦§ã®ããã®æå¹ãªã½ã¼ã¹ãæå®ãã¾ãã img-src-
ç»åããã¡ãã³ã³ã®ããã®æå¹ãªã½ã¼ã¹ãå®ç¾©ãã¾ãã
manifest-src-
ã¢ããªã±ã¼ã·ã§ã³ã®ãããã§ã¹ããã¡ã¤ã«ã®ããã®æå¹ãªã½ã¼ã¹ãæå®ãã¾ãã
media-src-
<audio>ã<video>ã<track>è¦ç´ ã«ãã£ã¦èªã¿è¾¼ãã¡ãã£ã¢ã®ããã®æå¹ãªã½ã¼ã¹ãæå®ãã¾ãã object-src-
<object>ã<embed>è¦ç´ ã®ããã®æå¹ãªã½ã¼ã¹ãæå®ãã¾ãã prefetch-src-
äºåã«ãã§ããããããæç»ãããæå¹ãªã½ã¼ã¹ãæå®ãã¾ãã
script-src-
JavaScript ããã³ WebAssembly ã®ããã®æå¹ãªã½ã¼ã¹ãæå®ãã¾ãã
script-src-elemããã³script-src-attrã®ä»£æ¿ã¨ãªãã¾ãã script-src-elem-
JavaScript ã®
<script>è¦ç´ ã®ããã®æå¹ãªã½ã¼ã¹ãæå®ãã¾ãã script-src-attr-
JavaScript ã®ã¤ã³ã©ã¤ã³ã¤ãã³ããã³ãã©ã¼ã®ããã®æå¹ãªã½ã¼ã¹ãæå®ãã¾ãã
style-src-
ã¹ã¿ã¤ã«ã·ã¼ãã®ããã®æå¹ãªã½ã¼ã¹ãæå®ãã¾ãã
style-src-elemããã³style-src-attrã®ä»£æ¿ã¨ãªãã¾ãã style-src-elem-
ã¹ã¿ã¤ã«ã·ã¼ãã®
<style>ããã³<link>è¦ç´ ã«rel="stylesheet"ãã¤ãããã®ã®ããã®æå¹ãªã½ã¼ã¹ãæå®ãã¾ãã style-src-attr-
åã ã® DOM è¦ç´ ã«é©ç¨ãããã¤ã³ã©ã¤ã³ã¹ã¿ã¤ã«ã®æå¹ãªã½ã¼ã¹ãæå®ãã¾ãã
worker-src-
WorkerãSharedWorkerãServiceWorkerã¹ã¯ãªããã®ããã®æå¹ãªã½ã¼ã¹ãæå®ãã¾ãã
ãã¹ã¦ã®ãã§ãããã£ã¬ã¯ãã£ãã«ã¯ãåä¸ã®å¤ã¨ãã¦'none' ãæå®ãããã¨ãã§ããããã¯ç¹å®ã®ãªã½ã¼ã¹ã¿ã¤ããå®å ¨ã«ãããã¯ãããã¨ãæå³ãã¾ããã¾ãã¯ã1ã¤ä»¥ä¸ã®ã½ã¼ã¹è¡¨ç¾å¤ã¨ãã¦æå®ãããã¨ãã§ããããã¯ãã®ãªã½ã¼ã¹ã¿ã¤ãã®æå¹ãªã½ã¼ã¹ãæå³ãã¾ãã詳細ã¯ããã§ãããã£ã¬ã¯ãã£ãã®æ§æãåç §ãã¦ãã ããã
代æ¿
ä¸é¨ã®ãã§ãããã£ã¬ã¯ãã£ãã¯ãä»ã«ãã£ã¨ç´°ãããã£ã¬ã¯ãã£ãã®ä»£æ¿ã¨ãã¦æ©è½ãã¾ããããã¯ããã£ã¨ç´°ãããã£ã¬ã¯ãã£ããæå®ããã¦ããªãå ´åã代æ¿ãã£ã¬ã¯ãã£ãããã®ãªã½ã¼ã¹ã¿ã¤ãã«å¯¾ãã¦ããªã·ã¼ãæä¾ãã¦ä½¿ç¨ãããã¨ãããã¨ãæå³ãã¦ãã¾ãã
default-srcã¯ä»ã®ãã¹ã¦ã®ãã§ãããã£ã¬ã¯ãã£ãã®ä»£æ¿ã¨ãªãã¾ããscript-srcã¯script-src-attrããã³script-src-elemã®ä»£æ¿ã¨ãªãã¾ããstyle-srcã¯style-src-attrããã³style-src-elemã®ä»£æ¿ã¨ãªãã¾ããchild-srcã¯frame-srcããã³worker-srcã®ä»£æ¿ã¨ãªãã¾ãã
ä¾ãã°ã次ã®ããã«ãªãã¾ãã
img-srcãçç¥ãããdefault-srcããã£ãå ´åãdefault-srcã§å®ç¾©ãããããªã·ã¼ãç»åã«é©ç¨ããã¾ããscript-src-elemãçç¥ãããscript-srcããã£ãå ´åãscript-srcã§å®ç¾©ãããããªã·ã¼ã<script>è¦ç´ ã«é©ç¨ããã¾ããscript-src-elemã¨script-srcãã¨ãã«çç¥ãããå ´åãdefault-srcã§å®ç¾©ãããããªã·ã¼ã<script>è¦ç´ ã«é©ç¨ããã¾ãã
ææ¸ãã£ã¬ã¯ãã£ã
ææ¸ãã£ã¬ã¯ãã£ãã¯ãããªã·ã¼ãé©ç¨ãããææ¸ã¾ãã¯ã¯ã¼ã«ã¼ç°å¢ã®ããããã£ã管çãã¾ãã
ããã²ã¼ã·ã§ã³ãã£ã¬ã¯ãã£ã
ããã²ã¼ã·ã§ã³ãã£ã¬ã¯ãã£ãã¯ãä¾ãã°ã¦ã¼ã¶ã¼ãç§»åããå ´æããã©ã¼ã ãéä¿¡ããå ´æã管çãã¾ãã
form-action-
æå®ã®ã³ã³ããã¹ããããã©ã¼ã ã®éä¿¡å ã¨ãã¦ä½¿ç¨ããã URL ãå¶éãã¾ãã
frame-ancestors-
<frame>ã<iframe>ã<object>ã<embed>ã«ãã£ã¦ãã¼ã¸ã«åãè¾¼ã¾ããæå¹ãªè¦ªãæå®ãã¾ãã
å ±åãã£ã¬ã¯ãã£ã
å ±åãã£ã¬ã¯ãã£ã㯠CSP éåã®å ±åéç¨ãå¶å¾¡ãã¾ãã Content-Security-Policy-Report-Only ãããã¼ãåç
§ãã¦ãã ããã
report-to-
CSP éåæ å ±ãéä¿¡ããããã®å ±åã¨ã³ããã¤ã³ãã¾ãã¯ã¨ã³ããã¤ã³ãã°ã«ã¼ããèå¥ãããã¼ã¯ã³ããã©ã¦ã¶ã¼ã«æä¾ãã¾ãã ãã¼ã¯ã³ã表ãã¨ã³ããã¤ã³ãã¯ãä»ã«ã
Reporting-Endpointsãªã©ã® HTTP ãããã¼ã§æå®ããã¦ããå ´åãããã¾ããè¦å: ãã®ãã£ã¬ã¯ãã£ãã¯
report-uriãç½®ãæãããã¨ãæå³ãã¦ãã¾ããreport-toã«å¯¾å¿ãããã©ã¦ã¶ã¼ã§ã¯ãreport-uriãã£ã¬ã¯ãã£ãã¯ç¡è¦ããã¾ãã ãã ããreport-toãåºã対å¿ãããããã«ãªãã¾ã§ã¯ã次ã®ããã«ã©ã¡ãã®ãããã¼ãæå®ãã¦ãã ããï¼ããã§ãendpoint_nameã¯å¥åã«æä¾ãããã¨ã³ããã¤ã³ãã®ååã§ãï¼ãhttpContent-Security-Policy: â¦; report-uri https://endpoint.example.com; report-to endpoint_name
ãã®ä»ã®ãã£ã¬ã¯ãã£ã
require-trusted-types-for-
DOM XSS ã¤ã³ã¸ã§ã¯ã·ã§ã³ã·ã³ã¯ã§ Trusted Types ãå¼·å¶ãã¾ãã
trusted-types-
Trusted Types ããªã·ã¼ã®ãã¯ã¤ããªã¹ããæå®ããããã«ä½¿ç¨ãã¾ã (Trusted Types ã¯ãã¢ããªã±ã¼ã·ã§ã³ã DOM XSS ã¤ã³ã¸ã§ã¯ã·ã§ã³ã·ã³ã¯ãããã¯ãã¦ã³ãã¦ãæååã®ä»£ããã«ã¹ãã¼ãã£ã³ã°ä¸å¯è½ãªåä»ãã®å¤ã®ã¿ãåãå ¥ããããã«ãã¾ã)ã
upgrade-insecure-requests-
å®å ¨ã§ãªã URL (HTTP ã§æä¾ããã¦ãããã®) ããã¹ã¦å®å ¨ãª URL (HTTPS ã§æä¾ããã¦ãããã®) ã«ç½®ãæãããã®ããã«æ±ãããã«ã¦ã¼ã¶ã¼ã¨ã¼ã¸ã§ã³ãã«æç¤ºãã¾ãã ãã®ãã£ã¬ã¯ãã£ãã¯ãæ¸ãæããå¿ è¦ãªå®å ¨ã§ãªãå¤ã URL ã大éã«ããã¦ã§ããµã¤ãã対象ã¨ãã¦ãã¾ãã
鿍奍ã®ãã£ã¬ã¯ãã£ã
block-all-mixed-content-
ãã¼ã¸ã HTTPS ã使ç¨ãã¦èªã¿è¾¼ã¾ããéã«ã HTTP ã使ç¨ãã¦è³ç£ãèªã¿è¾¼ããã¨ã鲿¢ãã¾ãã
report-uri-
ã¦ã¼ã¶ã¼ã¨ã¼ã¸ã§ã³ãã«ã³ã³ãã³ãã»ãã¥ãªãã£ããªã·ã¼ã®éåãå ±åããããæç¤ºãã¾ãã ããã¯
report-toãã£ã¬ã¯ãã£ãã«ç½®ãæãããã¾ããã
ãã§ãããã£ã¬ã¯ãã£ãã®æ§æ
ãã¹ã¦ã®ãã§ãããã£ã¬ã¯ãã£ãã¯ã次ã®ã©ã¡ãããæå®ãã¾ãã
- åä¸ã®å¤
'none'ã¯ãç¹å®ã®ãªã½ã¼ã¹åãå®å ¨ã«ãããã¯ãã¹ãã§ãããã¨ã示ãã¾ãã - 1 ã¤ä»¥ä¸ã®ã½ã¼ã¹å¼å¤ã¯ããã®ãªã½ã¼ã¹åã«å¯¾ããæå¹ãªã½ã¼ã¹ã示ãã¾ãã
åã½ã¼ã¹å¼ã¯ä¸è¨ã«åæããããããã®å½¢å¼ãåãã¾ãã ãã¹ã¦ã®å½¢å¼ããã¹ã¦ã®ãã§ãããã£ã¬ã¯ãã£ãã«é©ç¨ã§ããããã§ã¯ãªããã¨ã«æ³¨æãã¦ãã ãããé©ç¨ã§ããå½¢å¼ã«ã¤ãã¦ã¯ãåãã§ãããã£ã¬ã¯ãã£ãã®ããã¥ã¡ã³ããåç §ãã¦ãã ããã
<host-source> ããã³ <scheme-source> å½¢å¼ã¯å¼ç¨ç¬¦ãªãã§ãã¾ããä»ã«ããã¹ã¦å¼ç¨ç¬¦ã§å²ãå¿
è¦ãããã¾ãã
'nonce-<ãã³ã¹å¤>'
ãã®å¤ã¯ãæåå nonce- ã«ãã³ã¹å¤ãç¶ãããã®ã§ãããã³ã¹å¤ã¯ Base64 ã¾ã㯠URL ã»ã¼ã Base64 ã®æåã§ãã
ãã®æååã¯ããµã¼ãã¼ã HTTP ã¬ã¹ãã³ã¹ãã¨ã«çæããã©ã³ãã ãªå¤ã§ããä¾ã示ãã¾ãã
'nonce-416d1177-4d12-4e3b-b7c9-f6c409789fb8'
ãµã¼ãã¼ã¯ãåãå¤ããã®ææ¸ããèªã¿è¾¼ããã¨ãã <script> ã¾ã㯠<style> ã® nonce 屿§ã®å¤ã¨ãã¦å«ãããã¨ãã§ãã¾ãã
ãã©ã¦ã¶ã¼ã¯ CSP ãã£ã¬ã¯ãã£ãã®å¤ã¨è¦ç´ 屿§ã®å¤ãç §åããä¸è´ããå ´åã®ã¿ãªã½ã¼ã¹ãèªã¿è¾¼ã¿ã¾ãã
ãã£ã¬ã¯ãã£ãããã³ã¹ã¨ unsafe-inline ãæã£ã¦ããå ´åããã©ã¦ã¶ã¼ã¯ unsafe-inline ãç¡è¦ãã¾ãã
ãããªã使ç¨ä¾ã®æ å ±ã«ã¤ãã¦ã¯ã CSP ã¬ã¤ãã®ãã³ã¹ãåç §ãã¦ãã ããã
'<ããã·ã¥ã¢ã«ã´ãªãºã >-<ããã·ã¥å¤>'
ãã®å¤ã¯ãããã·ã¥ã¢ã«ã´ãªãºã ãèå¥ããæååã« - ãç¶ããããã·ã¥å¤ãç¶ãããã®ã§ããããã·ã¥å¤ã¯ Base64 ã¾ã㯠URL ã»ã¼ã Base64 ã®æåã§ãã
- ããã·ã¥ã¢ã«ã´ãªãºã èå¥åã¯ã
sha256ãsha384ãsha512ã®ããããã§ãªããã°ãªãã¾ããã - ããã·ã¥å¤ã¯ã
<script>ã¾ãã¯<style>ãªã½ã¼ã¹ã® base64 ã¨ã³ã³ã¼ããããããã·ã¥ã§ãããSHA-256ãSHA-384ãSHA-512 ã®ããããã®ããã·ã¥é¢æ°ã使ç¨ãã¦è¨ç®ããã¾ãã
ä¾ã示ãã¾ãã
'sha256-cd9827ad...'
ãã©ã¦ã¶ã¼ãææ¸ãåãåãã¨ã <script> ããã³ <style> è¦ç´ ã®ã³ã³ãã³ããããã·ã¥åãããã®çµæã CSP ãã£ã¬ã¯ãã£ãå
ã®ããã·ã¥ã¨ç
§åããä¸è´ããå ´åã®ã¿ãªã½ã¼ã¹ãèªã¿è¾¼ã¿ã¾ãã
è¦ç´ ãï¼ä¾ãã° src 屿§ã使ç¨ãã¦ï¼å¤é¨ãªã½ã¼ã¹ãèªã¿è¾¼ãã å ´åããã®è¦ç´ ã«ã¯ integrity 屿§ããªããã°ãªãã¾ããã
ãã£ã¬ã¯ãã£ãã«ããã·ã¥ã¨ unsafe-inline ãããå ´åããã©ã¦ã¶ã¼ã¯ unsafe-inline ãç¡è¦ãã¾ãã
ãã詳ããä½¿ç¨æ¹æ³ã«ã¤ãã¦ã¯ã CSP ã¬ã¤ãã®ããã·ã¥ã®é ç®ãåç §ãã¦ãã ããã
<host-source>
ãªã½ã¼ã¹ã®æå¹ãªã½ã¼ã¹ã§ãããã¹ãã® URL ã¾ã㯠IP ã¢ãã¬ã¹ã§ãã
ã¹ãã¼ã ããã¼ãçªå·ããã¹ã¯ãªãã·ã§ã³ã§ãã
ã¹ãã¼ã ãçç¥ããå ´åã¯ãææ¸ã®ãªãªã¸ã³ã®ã¹ãã¼ã ã使ç¨ããã¾ãã
ã¹ãã¼ã ãä¸è´ããå ´åãå®å ¨ãªã¢ããã°ã¬ã¼ãã許å¯ããã¾ããä¾ãã°ï¼
http://example.comã¯https://example.comããã®ãªã½ã¼ã¹ã許å¯ãã¾ããws://example.orgã¯wss://example.orgããã®ãªã½ã¼ã¹ã許å¯ãã¾ãã
ã¯ã¤ã«ãã«ã¼ã ('*') ã¯ããµããã¡ã¤ã³ããã¹ãã¢ãã¬ã¹ããã¼ãçªå·ã«ä½¿ç¨ãããã¨ãã§ãããããããã¹ã¦ã®æå¹ãªå¤ãæå¹ã§ãããã¨ã示ãã¾ããä¾ã示ãã¾ãã
http://*.example.comã¯ã HTTP ã¾ã㯠HTTPS ã§ãexample.comã®ã©ã®ãµããã¡ã¤ã³ããã®ãªã½ã¼ã¹ã許å¯ãã¾ãã
/ ã§çµãããã¹ã¯ãããããæ¥é è¾ã§ããä»»æã®ãã¹ã¨ç
§åãã¾ããä¾ã示ãã¾ãã
example.com/api/ã¯example.com/api/users/newããã®ãªã½ã¼ã¹ã許å¯ãã¾ãã
/ ã§çµãããªããã¹ã¯æ£ç¢ºã«ä¸è´ãã¾ããä¾ã示ãã¾ãã
https://example.com/file.jsã¯https://example.com/file.jsããã®ãªã½ã¼ã¹ã許å¯ãã¾ãããhttps://example.com/file.js/file2.jsããã¯è¨±å¯ãã¾ããã
<scheme-source>
ã¹ãã¼ã ï¼https: ãªã©ï¼ã§ããã³ãã³ã¯å¿
é ã§ãã
å®å ¨ãªã¢ããã°ã¬ã¼ãã許å¯ããã¦ãã¾ãã
http:㯠HTTPS ã使ç¨ãã¦èªã¿è¾¼ã¾ãããªã½ã¼ã¹ã許å¯ãã¾ããws:㯠WSS ã使ç¨ãã¦èªã¿è¾¼ã¾ãããªã½ã¼ã¹ã許å¯ãã¾ãã
'self'
æå®ãããåã®ãªã½ã¼ã¹ã¯ãææ¸ã¨åããªãªã¸ã³ããèªã¿è¾¼ã¾ãããã®ã®ã¿ã§ãã
å®å ¨ãªã¢ããã°ã¬ã¼ãã許å¯ããã¦ãã¾ãã
- ãã®ææ¸ã
http://example.comããæä¾ããã CSP ã'self'ã§ããã°ãhttps://example.comããã®ãªã½ã¼ã¹ã許å¯ãã¾ãã - ãã®ææ¸ã
ws://example.orgããæä¾ããã CSP ã'self'ã§ããã°ãws://example.orgããã®ãªã½ã¼ã¹ã許å¯ãã¾ãã
'unsafe-eval'
æ¢å®ã§ã¯ã CSP ã« default-src ã¾ã㯠script-src ãã£ã¬ã¯ãã£ããå«ã¾ãã¦ããå ´åã弿°ã JavaScript ã¨ãã¦è©ä¾¡ãã JavaScript ã®æ©è½ã¯ç¡å¹ã«ãªãã¾ããããã«ã¯ãeval()ãsetTimeout() ã® code 弿°ãã¾ã㯠Function() ã³ã³ã¹ãã©ã¯ã¿ã¼ãå«ã¾ãã¾ãã
ãã®ä¿è·ãè§£é¤ããã«ã¯ã unsafe-eval ãã¼ã¯ã¼ãã使ç¨ãããã¨ãã§ãã¾ããããã«ããã JavaScript ã§æååãåçã«è©ä¾¡ã§ããããã«ãªãã¾ãã
è¦å:
éçºè
㯠'unsafe-eval' ãé¿ããã¹ãã§ãããªããªãããã㯠CSP ãåå¨ããç®çã®å¤ããç¡æå³ã«ããããã§ãã
詳ããä½¿ãæ¹ã®æ
å ±ã¯ã CSP ã¬ã¤ãã® eval() ã¨åæ§ã® API ãåç
§ãã¦ãã ããã
'wasm-unsafe-eval'
æ¢å®ã§ã¯ã CSP ã« default-src ã¾ã㯠script-src ãã£ã¬ã¯ãã£ããå«ã¾ãã¦ããå ´åããã¼ã¸ã¯ WebAssembly.compileStreaming() ãªã©ã®é¢æ°ã使ç¨ã㦠WebAssembly ãã³ã³ãã¤ã«ãããã¨ã¯è¨±å¯ããã¾ããã
ãã®ä¿è·ãè§£é¤ããã«ã¯ã wasm-unsafe-eval ãã¼ã¯ã¼ãã使ç¨ãããã¨ãã§ãã¾ããããã¯ã JavaScript ã®ä¸è¬çãªè©ä¾¡ãå¯è½ã«ããªãããã 'unsafe-eval' ãããã¯ããã«å®å
¨ãªä»£æ¿ææ®µã§ãã
'unsafe-inline'
æ¢å®ã§ã¯ã CSP ã« default-src ã¾ã㯠script-src ãã£ã¬ã¯ãã£ããå«ã¾ãã¦ããå ´åãã¤ã³ã©ã¤ã³ JavaScript ã®å®è¡ã¯è¨±å¯ããã¾ãããããã«ã¯ä»¥ä¸ãå«ã¾ãã¾ãã
- ã¤ã³ã©ã¤ã³ã®
<script>ã¿ã° - ã¤ã³ã©ã¤ã³ã®ã¤ãã³ããã³ãã©ã¼å±æ§
javascript:URL
åæ§ã«ã CSP ã§ default-src ã¾ã㯠style-src ãã£ã¬ã¯ãã£ããè¨è¼ãã¦ããå ´åãã¤ã³ã©ã¤ã³ CSS ã¯èªã¿è¾¼ã¾ãã¾ããã
- ã¤ã³ã©ã¤ã³ã®
<style>ã¿ã° style屿§
ãã®ä¿è·ãè§£é¤ãããããã®ãã©ã¼ã ããã¹ã¦èªã¿è¾¼ããã¨ã許å¯ããã«ã¯ãunsafe-inline ãã¼ã¯ã¼ãã使ç¨ãããã¨ãã§ãã¾ãã
è¦å:
éçºè
㯠'unsafe-inline' ãé¿ããã¹ãã§ãããªããªãã CSP ãä¿æããå¤ãã®ç®çãç¡å¹ã«ããããã§ãã
詳ããä½¿ãæ¹ã®æ å ±ã¯ã CSP ã¬ã¤ãã®ã¤ã³ã©ã¤ã³ JavaScript ãåç §ãã¦ãã ããã
'unsafe-hashes'
æ¢å®ã§ã¯ã CSP ã« default-src ã¾ã㯠script-src ãã£ã¬ã¯ãã£ããå«ã¾ãã¦ããå ´åã onclick ãã¤ã³ã©ã¤ã³ style 屿§ãªã©ã®ã¤ã³ã©ã¤ã³ã¤ãã³ããã³ãã©ã¼å±æ§ã¯å®è¡ã§ãã¾ããã
'unsafe-hashes' å¼ã¯ãã¤ã³ã©ã¤ã³ã¤ãã³ããã³ãã©ã¼ãã¹ã¿ã¤ã«å±æ§ã«ããã·ã¥å¼ã使ç¨ãããã¨ããã©ã¦ã¶ã¼ã«è¨±å¯ãã¾ããä¾ãã°ã CSP ã«ã¯æ¬¡ã®ãããªãã£ã¬ã¯ãã£ããå«ã¾ãã¦ããããããã¾ããã
script-src 'unsafe-hashes' 'sha256-cd9827ad...'
ããã·ã¥å¤ãã¤ã³ã©ã¤ã³ã¤ãã³ããã³ãã©ã¼å±æ§å¤ã¾ã㯠style 屿§å¤ã®ããã·ã¥ã¨ä¸è´ããå ´åããã®ã³ã¼ãã¯å®è¡ã許å¯ããã¾ãã
ã¡ã¢:
'unsafe-hashes' å¤ã¯å®å
¨ã§ã¯ããã¾ããã
ç¹ã«ãã¤ã³ã©ã¤ã³ã¤ãã³ããã³ãã©ã¼å±æ§ã®ã³ã³ãã³ãããã¤ã³ã©ã¤ã³ <script> è¦ç´ ã¨ãã¦ææ¸å
ã«æ³¨å
¥ãããæ»æãå¯è½ã«ãªãã¾ããã¤ã³ã©ã¤ã³ã¤ãã³ããã³ãã©ã¼ã以ä¸ã§ããã¨ä»®å®ãã¾ãã
<button onclick="transferAllMyMoney()">Transfer all my money</button>
æ»æè
ããã®ã³ã¼ããæ ¼ç´ããã¤ã³ã©ã¤ã³ <script> è¦ç´ ãæ³¨å
¥ã§ããå ´åã CSP ã¯èªåçã«å®è¡ã許å¯ãã¾ãã
ãããã 'unsafe-hashes' 㯠'unsafe-inline' ãããã¯ããã«å®å
¨ã§ãã
'inline-speculation-rules'
æ¢å®ã§ã¯ã CSP ã« default-src ã¾ã㯠script-src ãã£ã¬ã¯ãã£ããå«ã¾ãã¦ããå ´åãã¤ã³ã©ã¤ã³ JavaScript ã®å®è¡ã¯è¨±å¯ããã¾ããã 'inline-speculation-rules' ã¯ããã©ã¦ã¶ã¼ã type 屿§ã speculationrules ã§ããã¤ã³ã©ã¤ã³ <script> è¦ç´ ãèªã¿è¾¼ããã¨ã許å¯ãã¾ãã
詳ããã¯ææ©ã«ã¼ã« API ãåç §ãã¦ãã ããã
'strict-dynamic'
'strict-dynamic' ãã¼ã¯ã¼ãã¯ããã³ã¹ã¾ãã¯ããã·ã¥ã«ãã£ã¦ã¹ã¯ãªããã«ä»ä¸ãããä¿¡é ¼ããä¾ãã°ã Document.createElement() ã使ç¨ãã¦æ°ãã <script> ã¿ã°ã使ãã Node.appendChild() ã使ç¨ãã¦ææ¸å
ã®ã¿ã°ãæ¿å
¥ãããªã©ãåçã«èªã¿è¾¼ã¾ããã¹ã¯ãªããã«ãæ¡å¼µãã¾ãã
ãã®ãã¼ã¯ã¼ãããã£ã¬ã¯ãã£ãã«åå¨ããå ´åãæ¬¡ã®ã½ã¼ã¹å¼ã®å¤ã¯ãã¹ã¦ç¡è¦ããã¾ãã
ãã詳ãã使ç¨ã«é¢ããæ
å ±ã¯ã CSP ã¬ã¤ãã® strict-dynamic ãã¼ã¯ã¼ããåç
§ãã¦ãã ããã
'report-sample'
ãã®å¼ãã¹ã¯ãªãããã¹ã¿ã¤ã«ãå¶å¾¡ãããã£ã¬ã¯ãã£ãã«å«ã¾ãããã®ãã£ã¬ã¯ãã£ãããã©ã¦ã¶ã¼ã«ã¤ã³ã©ã¤ã³ã¹ã¯ãªãããã¤ã³ã©ã¤ã³ã¹ã¿ã¤ã«ãã¾ãã¯ã¤ãã³ããã³ãã©ã¼å±æ§ããããã¯ãããå ´åããã©ã¦ã¶ã¼ãçæããéåã¬ãã¼ãã«ã¯ããããã¯ããããªã½ã¼ã¹ã®æåã® 40 æåãå«ã sample ããããã£ãå«ã¾ãã¾ãã
ã¯ã¼ã«ã¼å ã® CSP
ã¯ã¼ã«ã¼ã¯ãä¸è¬çã«ææ¸ (ãããã¯è¦ªã¯ã¼ã«ã¼) ã®ã³ã³ãã³ãã»ãã¥ãªãã£ããªã·ã¼ã«ãã£ã¦ç®¡çããã¾ãããã¯ã¼ã«ã¼ã«å¯¾ãã¦ã³ã³ãã³ãã»ãã¥ãªãã£ããªã·ã¼ãæå®ããã«ã¯ãã¯ã¼ã«ã¼ã¹ã¯ãªããèªèº«ãè¦æ±ãããªã¯ã¨ã¹ãã«å¯¾ã㦠Content-Security-Policy ã¬ã¹ãã³ã¹ãããã¼ãè¨å®ãã¦ä¸ããã
ã¯ã¼ã«ã¼ã¹ã¯ãªããã®ãªãªã¸ã³ãã°ãã¼ãã«ã§ä¸æã®èå¥åã®å ´åï¼ä¾ãã°ãURL ã®ã¹ãã¼ã ã data ã blob ã®å ´åï¼ã¯ä¾å¤ã§ãããã®å ´åãã¯ã¼ã«ã¼ã¯ææ¸ãããã¯ä½æå ã®ã¯ã¼ã«ã¼ã®ã³ã³ãã³ãã»ãã¥ãªãã£ããªã·ã¼ãç¶æ¿ãã¾ãã
è¤æ°ã®ã³ã³ãã³ãã»ãã¥ãªãã£ããªã·ã¼
CSP ã®æ©æ§ã§ã¯ãContent-Security-Policy ãããã¼ãContent-Security-Policy-Report-Only ãããã¼ã <meta> è¦ç´ ãçµç±ãããã®ãå«ãããªã½ã¼ã¹ã«å¯¾ãã¦è¤æ°ã®ããªã·ã¼ãæå®ãããã¨ãã§ãã¾ãã
以ä¸ã®ä¾ã®ããã«ã Content-Security-Policy ãããã¼ãè¤æ°å使ããã¨ãã§ãã¾ããããã§ã¯ connect-src ãã£ã¬ã¯ãã£ãã«ç¹ã«æ³¨æãã¦ãã ããã 2 ã¤ç®ã®ããªã·ã¼ã§ã¯æ¥ç¶ã許å¯ãã¦ããã«ããããããã 1 ã¤ç®ã®ããªã·ã¼ã«ã¯ connect-src 'none' ãå«ã¾ãã¦ãã¾ãã追å ã®ããªã·ã¼ã追å ãã¦ããä¿è·ããããªã½ã¼ã¹ã®æ©è½ãããã«å¶éãããã¨ãã§ããã ãã§ãæ¥ç¶ã¯è¨±å¯ããããæãå³å¯ãªããªã·ã¼ã¨ã㦠connect-src 'none' ãå¼·å¶ããã¾ãã
Content-Security-Policy: default-src 'self' http://example.com;
connect-src 'none';
Content-Security-Policy: connect-src http://example.com/;
script-src http://example.com/
ä¾
>å®å ¨ã§ã¯ãªãã¤ã³ã©ã¤ã³ã³ã¼ããç¡å¹ã«ãã HTTPS ã®ãªã½ã¼ã¹ã®ã¿ã許å¯ãã
ãã® HTTP ãããã¼ã¯ãæ¢å®ã§ã¯ãªã½ã¼ã¹ã®èªã¿è¾¼ã¿ï¼ç»åããã©ã³ããã¹ã¯ãªãããªã©ï¼ã HTTPS çµç±ã®ã¿è¨±å¯ããããã«è¨å®ãã¾ãã
unsafe-inline ããã³ unsafe-eval ãã£ã¬ã¯ãã£ããè¨å®ããã¦ããªããããã¤ã³ã©ã¤ã³ã¹ã¯ãªããã¯ãããã¯ããã¾ãã
Content-Security-Policy: default-src https:
HTML ã® <meta> è¦ç´ ã使ç¨ãã¦ããåãå¶éãé©ç¨ãããã¨ãã§ãã¾ãã
<meta http-equiv="Content-Security-Policy" content="default-src https:" />
ã¤ã³ã©ã¤ã³ã³ã¼ã㨠HTTPS ãªã½ã¼ã¹ã許å¯ãããããã©ã°ã¤ã³ãç¡å¹ã«ãã
ãã®ããªã·ã¼ã¯ãä¿®æ£ãã¹ãã¤ã³ã©ã¤ã³ã³ã¼ããå¤ç¨ããæ¢åã®ãµã¤ãã§ä½¿ç¨ãããã¨ãã§ãããªã½ã¼ã¹ã確å®ã« HTTPS çµç±ã§èªã¿è¾¼ã¾ããããã«ãããã©ã°ã¤ã³ãç¡å¹ã«ãããã¨ãã§ãã¾ãã
Content-Security-Policy: default-src https: 'unsafe-eval' 'unsafe-inline'; object-src 'none'
æ¤æ»æã«éåãå ±åããããéåãå¼·å¶ããªã
ãã®ä¾ã§ã¯ã Content-Security-Policy-Report-Only ãããã¼ã¨ report-to ãã£ã¬ã¯ãã£ãã使ç¨ãã¦ãååã¨åãå¶éãè¨å®ãã¾ãã
ãã®ææ³ã¯ãæ¤æ»ä¸ã«éåãå ±åããããã«ä½¿ç¨ãã¾ãããã³ã¼ãã®å®è¡ããããã¯ãããã¨ã¯ããã¾ããã
ã¬ãã¼ããéä¿¡ããã¨ã³ããã¤ã³ã (URL)ã HTTP ã¬ã¹ãã³ã¹ãããã¼ã® Reporting-Endpoints ã使ç¨ãã¦å®ç¾©ãã¾ãã
Reporting-Endpoints: csp-endpoint="https://example.com/csp-reports"
CSP ããªã·ã¼ã§ã¯ã report-to ãã£ã¬ã¯ãã£ãã使ç¨ãã¦ãå
·ä½çãªã¨ã³ããã¤ã³ããå ±åå
ã¨ãã¦é¸æããã¾ãã
Content-Security-Policy-Report-Only: default-src https:; report-uri /csp-violation-report-url/; report-to csp-endpoint
report-uri ãã£ã¬ã¯ãã£ããä¸è¨ã§æå®ããã¦ãããã¨ã«æ³¨æãã¦ãã ããã report-to ã¯ã¾ã åºããã©ã¦ã¶ã¼ã対å¿ãã¦ããªãããã§ãã
ãã®ä»ã®ä¾ã¯ãContent Security Policy (CSP) ã®å®è£ ãåç §ãã¦ä¸ããã
仿§æ¸
| 仿§æ¸ |
|---|
| Content Security Policy Level 3 > # csp-header > |
ãã©ã¦ã¶ã¼ã®äºææ§
é¢é£æ å ±
Content-Security-Policy-Report-Only- ã³ã³ãã³ãã»ãã¥ãªãã£ããªã·ã¼ãå¦ã¶
- WebExtension ã®ã³ã³ãã³ãã»ãã¥ãªãã£
- Adopting a strict policy
- CSP Evaluator - ã³ã³ãã³ãã»ãã¥ãªãã£ããªã·ã¼ãè©ä¾¡ãã