ð¡ïž CSPããããŒçæ
æå¹ã«ãããã£ã¬ã¯ãã£ããããã£ã¬ã¯ãã£ãå å€; ãã®åœ¢åŒã§ã»ãã³ãã³åºåãã«çµåãããŸãã
Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self'
Webãµã€ãã®ã»ãã¥ãªãã£ã匷åããContent-Security-Policy(CSP)ããããŒãããã£ã¬ã¯ãã£ã(default-src, script-src ãªã©)ããšã«ãã§ãã¯ããã¯ã¹ã§æå¹åããèš±å¯ãããœãŒã¹ãå ¥åããããšã§çµã¿ç«ãŠãããŒã«ã§ãã
äœ¿ãæ¹
- èšå®ããããã£ã¬ã¯ãã£ãã®ãã§ãã¯ããã¯ã¹ãæå¹ã«ããŸãã
- èš±å¯ãããœãŒã¹(äŸ: 'self' https://example.com)ãå ¥åããŸãã
- çµã¿ç«ãŠãããCSPããããŒæååãèªåçã«è¡šç€ºãããŸãã
èšç®ã®ä»çµã¿
CSPïŒContent Security Policyãã³ã³ãã³ãã»ãã¥ãªãã£ããªã·ãŒïŒã¯ãããŒãžãèªã¿èŸŒãã§ããã¹ã¯ãªãããç»åãªã©ã®ååŸå ããã©ãŠã¶ã«äŒããHTTPããããŒã§ãW3Cã®ä»æ§ã§å®ããããŠããŸããã¯ãã¹ãµã€ãã¹ã¯ãªããã£ã³ã°ïŒXSSïŒãªã©ã§äžæ£ãªã¹ã¯ãªãããå ¥ã蟌ãã§ããèš±å¯ãããŠããªãååŸå ãªãå®è¡ãããŸããã ããããŒã¯ããã£ã¬ã¯ãã£ãå å€ããã; ãã§ã€ãªãã 圢ã§ãããã®ããŒã«ã¯ããã§ãã¯ãå ¥ãããã£ã¬ã¯ãã£ãã®ãã¡ãå€ãå ¥ã£ãŠãããã®ã ããã€ãªãã§ããããŒãäœããŸãã äž»ãªãã£ã¬ã¯ãã£ã default-src: ã»ãã®ãã£ã¬ã¯ãã£ãã§æå®ããªãã£ãçš®é¡ã®æ¢å®å€ script-src: JavaScript style-src: CSS img-src: ç»å connect-src: fetchãWebSocketãªã©ã®æ¥ç¶å frame-src: iframeã§åã蟌ãããŒãž object-src: ãã©ã°ã€ã³ïŒ'none'ãæšå¥šïŒ base-uri: <base>ã¿ã°ã§æå®ã§ããURL form-action: ãã©ãŒã ã®éä¿¡å
èšç®äŸ
åæèšå®ã§äœãããããã㌠Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' 'self'ã¯ãããŒãžãšåããªãªãžã³ïŒã¹ããŒã ã»ãã¹ãã»ããŒããåãïŒã衚ããŸãã Google Fontsã䜿ãå Žåã®äŸ style-src 'self' https://fonts.googleapis.com; font-src https://fonts.gstatic.com
䜿çšäžã®æ³šæ
- ãããªãæ¬çªã§æå¹ã«ãããšãå¿ èŠãªã¹ã¯ãªãããŸã§æ¢ãŸãããšããããŸãããŸããContent-Security-Policy-Report-OnlyãããããŒã§éåã®å ±åã ããåãåããåé¡ããªãããšã確ãããŠããåãæ¿ããŠãã ããã
- 'unsafe-inline'ã'unsafe-eval'ãèš±å¯ãããšãXSSãžã®é²åŸ¡å¹æã倧ããäžãããŸãã
- 'self'ã'none'ã®ãããªããŒã¯ãŒãã¯ãã·ã³ã°ã«ã¯ã©ãŒãã§å²ãå¿ èŠããããŸããURLã¯å²ã¿ãŸããã
ãããã質å
Content-Security-Policyãšã¯äœã§ãã?
XSS(ã¯ãã¹ãµã€ãã¹ã¯ãªããã£ã³ã°)ãªã©ã®æ»æã軜æžããããã«ããã©ãŠã¶ãã©ã®ãœãŒã¹ããã¹ã¯ãªãããç»åãªã©ã®ãªãœãŒã¹ãèªã¿èŸŒãã§ããããå¶éããHTTPã¬ã¹ãã³ã¹ããããŒã§ãã
'self'ãšã¯äœã§ãã?
çŸåšã®ãµã€ããšåäžãªãªãžã³(åãã¹ããŒã ã»ãã¹ãã»ããŒã)ããã®ãªãœãŒã¹èªã¿èŸŒã¿ã®ã¿ãèš±å¯ããããŒã¯ãŒãã§ããCSPã®ããŒã¯ãŒãå€ã¯å¿ ãåäžåŒçšç¬Šã§å²ãå¿ èŠããããŸãã
çæãããããããŒã¯ã©ã䜿ãã°ããã§ãã?
WebãµãŒããŒãã¢ããªã±ãŒã·ã§ã³ã®ã¬ã¹ãã³ã¹ããããŒãšããŠã衚瀺ãããæååããã®ãŸãŸ `Content-Security-Policy` ããããŒã«èšå®ããŠãã ããããŸãã¬ããŒãå°çšã¢ãŒã(Content-Security-Policy-Report-Only)ã§ãã¹ãããããšãããããããŸãã