ãã©ãŠã¶æ¡åŒµæ©èœã®æš©éãšJavaScript APIã®ã»ãã¥ãªãã£ã¢ãã«ãæ¢ããæœåšçãªã¹ã¯ããã¹ããã©ã¯ãã£ã¹ãã°ããŒãã«ãªæèã§ã®ãŠãŒã¶ãŒããŒã¿ä¿è·ã解説ããŸãã
ãã©ãŠã¶æ¡åŒµæ©èœã®æš©éïŒJavaScript APIã»ãã¥ãªãã£ã¢ãã«ã®æ·±æã
ãã©ãŠã¶æ¡åŒµæ©èœã¯ãåºåãããã¯ãããã¹ã¯ãŒã管çãŸã§ãå€å²ã«ãããæ©èœãæäŸãããŠãŒã¶ãŒäœéšãå€§å¹ ã«åäžãããããšãã§ãã匷åãªããŒã«ã§ãããããããã®åã«ã¯è²¬ä»»ã䌎ããŸããããã¯ãæ¡åŒµæ©èœã®æš©éãšJavaScript APIã«é¢é£ããã»ãã¥ãªãã£ãªã¹ã¯ãçè§£ãã軜æžããããšã§ãããã®èšäºã§ã¯ããã©ãŠã¶æ¡åŒµæ©èœãæ¯ããã»ãã¥ãªãã£ã¢ãã«ãå æ¬çã«æ¢æ±ããæš©éãã©ã®ããã«æ©èœããã®ãããããŠéçºè ãã°ããŒãã«ãªãŠãŒã¶ãŒããŒã¹ã®ããã«å®å šã§ä¿¡é Œæ§ã®é«ãæ¡åŒµæ©èœãæ§ç¯ããæ¹æ³ã«çŠç¹ãåœãŠãŸãã
ãã©ãŠã¶æ¡åŒµæ©èœã®ã¢ãŒããã¯ãã£ãšJavaScript APIã®çè§£
ãã©ãŠã¶æ¡åŒµæ©èœã¯ããã®æ žå¿ã«ãããŠããŠã§ããã©ãŠã¶ã®æ©èœã倿Žã»åŒ·åããå°ããªããã°ã©ã ã§ããHTMLãCSSããããŠæãéèŠãªJavaScriptãšãã£ããŠã§ãæè¡ã䜿çšããŠæ§ç¯ãããŸããJavaScript APIã¯ãæ¡åŒµæ©èœã«æ§ã ãªãã©ãŠã¶ã®æ©èœãžã®ã¢ã¯ã»ã¹ãæäŸãããŠã§ãããŒãžãšã®å¯Ÿè©±ãã³ã³ãã³ãã®å€æŽããŠãŒã¶ãŒããŒã¿ãžã®ã¢ã¯ã»ã¹ããã®ä»ã®ã¢ã¯ã·ã§ã³ã®å®è¡ãå¯èœã«ããŸãããã®ã¢ã¯ã»ã¹ã¯ãæ¡åŒµæ©èœã®ãããã§ã¹ããã¡ã€ã«ã§å®£èšãããæš©éã·ã¹ãã ãéããŠèš±å¯ãããŸãã
ãããã§ã¹ããã¡ã€ã«ïŒéåžžmanifest.json
ãšããååïŒã¯ãæ¡åŒµæ©èœã®èšèšå³ãšããŠæ©èœããŸããæ¡åŒµæ©èœã®ååãããŒãžã§ã³ã説æããããŠæ±ºå®çã«éèŠãªããšãšããŠãæ¡åŒµæ©èœãå¿
èŠãšããæš©éãæå®ããŸãããããã®æš©éã¯ãæ¡åŒµæ©èœããã©ãŠã¶ç°å¢å
ã§æã€ã¢ã¯ã»ã¹ã®ç¯å²ãå®çŸ©ããŸãã
æ¡åŒµæ©èœã®äž»èŠã³ã³ããŒãã³ãïŒ
- ãããã§ã¹ããã¡ã€ã« (
manifest.json
): æ¡åŒµæ©èœã®ã¡ã¿ããŒã¿ãšå¿ èŠãªæš©éã宣èšããŸãã - ããã¯ã°ã©ãŠã³ãã¹ã¯ãªãã: ããã¯ã°ã©ãŠã³ãã§å®è¡ãããæ¡åŒµæ©èœã®ã³ã¢ããžãã¯ãåŠçããŸããããã¯ãã€ãã³ãã管çããAPIãšå¯Ÿè©±ããã¿ã¹ã¯ã調æŽããæ°žç¶çãªããã»ã¹ã§ãã
- ã³ã³ãã³ãã¹ã¯ãªãã: ç¹å®ã®ãŠã§ãããŒãžã«æ³šå ¥ããããããã®ããŒãžã®ã³ã³ãã³ããåäœã倿Žã§ããŸãããŠã§ãããŒãžã®ã³ã³ããã¹ãå ã§åäœããŸãããæ¡åŒµæ©èœã®APIã«ã¢ã¯ã»ã¹ã§ããŸãã
- ãããã¢ãã/ãªãã·ã§ã³ããŒãž: ãŠãŒã¶ãŒãæ¡åŒµæ©èœãšå¯Ÿè©±ããèšå®ãæ§æããæ å ±ã衚瀺ããããã®ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹èŠçŽ ã§ãã
æš©éã·ã¹ãã ïŒã»ãã¥ãªãã£ã®çªäºº
æš©éã·ã¹ãã ã¯ããã©ãŠã¶æ¡åŒµæ©èœã»ãã¥ãªãã£ã®ç€ã§ããæªæã®ããããããã¯è³ªã®äœãæ¡åŒµæ©èœã«ããæœåšçãªåœ±é¿ãããã©ãŠã¶ã®ãªãœãŒã¹ããŠãŒã¶ãŒããŒã¿ãžã®å¿ èŠæå°éã®ã¢ã¯ã»ã¹ã®ã¿ãèš±å¯ããããšã§å¶éããããã«èšèšãããŠããŸãããŠãŒã¶ãŒãæ¡åŒµæ©èœãã€ã³ã¹ããŒã«ããéããã®æ¡åŒµæ©èœãå¿ èŠãšããæš©éã®ãªã¹ããæç€ºãããŸãããŠãŒã¶ãŒã¯ãã®åŸããããã®æš©éãèš±å¯ãããã©ãããæ±ºå®ããŸãããŠãŒã¶ãŒã®æèãé«ããäžã§éèŠãªã®ã¯ããã®æš©éèŠæ±ãæç¢ºãç°¡æœã§ã容æã«çè§£ã§ããããšããããŠçæ³çã«ã¯ãŠãŒã¶ãŒã®æ¯åœèªã§ããããšã§ãïŒã°ããŒãã«ãªå©çšè ã察象ãšããã«ã¯ããŒã«ã©ã€ãŒãŒã·ã§ã³ãéµãšãªããŸãïŒïŒã
æš©éã®çš®é¡ïŒ
- ãã¹ãæš©é: ç¹å®ã®ãŠã§ããµã€ãããã¡ã€ã³ãžã®ã¢ã¯ã»ã¹ãèš±å¯ããŸããäŸãã°ã
"https://example.com/*"
ã¯example.com
ãã¡ã€ã³äžã®ãã¹ãŠã®ããŒãžãžã®ã¢ã¯ã»ã¹ãèš±å¯ããŸããããã¯äžè¬çã§ãæœåšçã«åŒ·åãªæš©éã§ãã - APIæš©é:
"tabs"
ïŒãã©ãŠã¶ã®ã¿ã管çïŒã"storage"
ïŒããŒã¿ä¿åïŒã"cookies"
ïŒCookieãžã®ã¢ã¯ã»ã¹ãšæäœïŒã"notifications"
ïŒéç¥ã®è¡šç€ºïŒã"geolocation"
ïŒãŠãŒã¶ãŒã®äœçœ®æ å ±ãžã®ã¢ã¯ã»ã¹ïŒã"history"
ïŒé²èЧ履æŽãžã®ã¢ã¯ã»ã¹ïŒãªã©ãç¹å®ã®ãã©ãŠã¶APIãžã®ã¢ã¯ã»ã¹ãèš±å¯ããŸãã - 宣èšçæš©é: åºç¯ãªæš©éãèŠæ±ããããšãªããæ¡åŒµæ©èœãã€ãã³ãã«åå¿ã§ããããã«ããŸããäŸãã°ã
"declarativeNetRequest"
ã¯ãæ¡åŒµæ©èœããªã¯ãšã¹ãã®å å®¹ãæ€æ»ããããšãªããå®çŸ©æžã¿ã®ã«ãŒã«ã«åºã¥ããŠãããã¯ãŒã¯ãªã¯ãšã¹ãããããã¯ãŸãã¯å€æŽããããšãå¯èœã«ããŸããããã¯ããã¹ãŠã®ãããã¯ãŒã¯ãã©ãã£ãã¯ãååãããããå®å šãªä»£æ¿ææ®µã§ãã
ãããã§ã¹ããã¡ã€ã«ã®äŸïŒ
次ã®manifest.json
ã®äŸãèããŠã¿ãŸãããïŒ
{
"manifest_version": 3,
"name": "My Example Extension",
"version": "1.0",
"description": "A simple extension that modifies the background color of example.com.",
"permissions": [
"storage",
"activeTab",
"https://example.com/*"
],
"background": {
"service_worker": "background.js"
},
"content_scripts": [
{
"matches": ["https://example.com/*"],
"js": ["content.js"]
}
],
"action": {
"default_popup": "popup.html"
}
}
ãã®æ¡åŒµæ©èœã¯ã以äžã®æš©éãèŠæ±ããŸãïŒ
"storage"
: ããŒã¿ãä¿åããã³ååŸããããïŒäŸïŒãŠãŒã¶ãŒèšå®ïŒã"activeTab"
: çŸåšã¢ã¯ãã£ããªã¿ãã«é¢ããæ å ±ã«ã¢ã¯ã»ã¹ããããã"https://example.com/*"
:example.com
ãã¡ã€ã³ã®ãã¹ãŠã®ããŒãžã«ã¢ã¯ã»ã¹ããããã
æ¡åŒµæ©èœã®æš©éã«é¢é£ããã»ãã¥ãªãã£ãªã¹ã¯
æš©éã·ã¹ãã ã¯ããçšåºŠã®ã»ãã¥ãªãã£ãæäŸããŸãããå®ç§ã§ã¯ãããŸããããã©ãŠã¶æ¡åŒµæ©èœã®æš©éã«ã¯ãããã€ãã®æœåšçãªãªã¹ã¯ãé¢é£ããŠããŸãïŒ
1. é床ã«åºç¯ãªæš©éïŒ
å¿
èŠä»¥äžã®æš©éãèŠæ±ããããšã¯ãããããééãã§ããéçºè
ã¯æå°æš©éã®ååã«åŸããæ¡åŒµæ©èœãæ£ããæ©èœããããã«å¿
èŠãªæå°éã®æš©éã»ããã®ã¿ãèŠæ±ãã¹ãã§ããäŸãã°ãç¹å®ã®ããŒãžã®èæ¯è²ã倿Žããã ãã®æ¡åŒµæ©èœãããã¹ãŠã®ãŠã§ããµã€ããžã®ã¢ã¯ã»ã¹ïŒ"
ïŒããŠãŒã¶ãŒã®é²èЧ履æŽãžã®ã¢ã¯ã»ã¹ãèŠæ±ãã¹ãã§ã¯ãããŸãããé床ã«åºç¯ãªæš©éã¯æ»æå¯Ÿè±¡é åãå¢å ãããæ¡åŒµæ©èœãæªæã®ããæ»æè
ã«ãšã£ãŠããé
åçãªæšçã«ããŸããããã¯ãã°ããŒãã«ãªãŠãŒã¶ãŒããŒã¹ãšæ§ã
ãªããžã¿ã«ãªãã©ã·ãŒã®ã¬ãã«ãèæ
®ãããšç¹ã«éèŠã§ãã
2. æš©éææ ŒïŒ
æš©éææ Œã¯ãæ»æè ãæ¬æ¥èš±å¯ãããŠãããããé«ãã¬ãã«ã®æš©éãžã®ã¢ã¯ã»ã¹ãåŸããšãã«çºçããŸããããã¯ãæ¡åŒµæ©èœã«ãæ»æè ãã»ãã¥ãªãã£ãã§ãã¯ããã€ãã¹ããŠæ©å¯æ§ã®é«ãAPIãããŒã¿ã«ã¢ã¯ã»ã¹ã§ãããããªè匱æ§ãå«ãŸããŠããå Žåã«èµ·ããåŸãŸããäŸãã°ã䟵害ãããã³ã³ãã³ãã¹ã¯ãªããããæ¡åŒµæ©èœã®æš©éã§ä»»æã®JavaScriptã³ãŒããå®è¡ããããã«äœ¿çšãããããŒã¿çé£ããã«ãŠã§ã¢ã®ã€ã³ã¹ããŒã«ã«ã€ãªããå¯èœæ§ããããŸããæ¡åŒµæ©èœå ã§CSRFïŒã¯ãã¹ãµã€ããªã¯ãšã¹ããã©ãŒãžã§ãªïŒããã®ä»ã®äžè¬çãªãŠã§ãã®è匱æ§ããä¿è·ããããšãäžå¯æ¬ ã§ãã
3. ããŒã¿æŒæŽ©ïŒ
é²èЧ履æŽãCookieããŠãŒã¶ãŒèªèšŒæ å ±ãªã©ã®æ©å¯ããŒã¿ã«ã¢ã¯ã»ã¹ã§ããæ¡åŒµæ©èœã¯ãããŒã¿æŒæŽ©ã«å¯ŸããŠè匱ã§ãã䟵害ãããæ¡åŒµæ©èœã¯ããããã®ããŒã¿ãæ»æè ãå¶åŸ¡ãããªã¢ãŒããµãŒããŒã«æãåºãããã«äœ¿çšãããå¯èœæ§ããããŸããäžèŠç¡å®³ã«èŠããããŒã¿ã§ãããéçŽã»åæããããšããŠãŒã¶ãŒã«é¢ããæ©å¯æ å ±ãæããã«ããå¯èœæ§ããããŸããäŸãã°ããŠã§ããµã€ãã®èšªåã远跡ããæ¡åŒµæ©èœã¯ããŠãŒã¶ãŒã®èå³ãæ¿æ²»çæå±ãå¥åº·ç¶æ ãªã©ãæšæž¬ããå¯èœæ§ããããŸãã
4. ã¯ãã¹ãµã€ãã¹ã¯ãªããã£ã³ã°ïŒXSSïŒãšã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³ïŒ
XSSã®è匱æ§ã¯ãæ¡åŒµæ©èœããŠãŒã¶ãŒããæäŸãããããŒã¿ãé©åãªãµãã¿ã€ãºãªãã«ãŠã§ãããŒãžã«æ³šå ¥ããå Žåã«çºçããå¯èœæ§ããããŸããããã«ãããæ»æè ã¯æªæã®ããJavaScriptã³ãŒããæ³šå ¥ããCookieãçãã ãããŠãŒã¶ãŒããã£ãã·ã³ã°ãµã€ãã«ãªãã€ã¬ã¯ããããããŠã§ããµã€ããæ¹ãããããããããšãã§ããŸããã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³ã®è匱æ§ã¯ãæ¡åŒµæ©èœãæ»æè ã«æ¡åŒµæ©èœã®ã³ã³ããã¹ãå ã§ä»»æã®ã³ãŒããå®è¡ãããããšãèš±å¯ããå Žåã«çºçããå¯èœæ§ããããŸããããã¯ãæ¡åŒµæ©èœã®ã³ãŒãã®è匱æ§ãæªçšããããæ¡åŒµæ©èœã®ã¹ãã¬ãŒãžã«æªæã®ããã³ãŒããæ³šå ¥ãããªã©ãæ§ã ãªææ®µã§éæã§ããŸããåžžã«å ¥åºåããµãã¿ã€ãºããã³ã³ãã³ãã»ãã¥ãªãã£ããªã·ãŒïŒCSPïŒã掻çšããŠãã ããã
5. ãµãŒãããŒãã£ã©ã€ãã©ãªãšäŸåé¢ä¿ïŒ
æ¡åŒµæ©èœã¯ãç¹å®ã®æ©èœãæäŸããããã«ãµãŒãããŒãã£ã®ã©ã€ãã©ãªãäŸåé¢ä¿ã«äŸåããããšããããããŸãããããã®ã©ã€ãã©ãªã«ã¯ãæ»æè ã«ãã£ãŠæªçšãããå¯èœæ§ã®ããè匱æ§ãå«ãŸããŠããããšããããŸãããããã®ã©ã€ãã©ãªãææ°ã®ç¶æ ã«ä¿ã¡ãæ¢ç¥ã®è匱æ§ããªãã宿çã«ã¹ãã£ã³ããããšã極ããŠéèŠã§ããSnykãDependabotã®ãããªããŒã«ã¯ããã®ããã»ã¹ãèªååããã®ã«åœ¹ç«ã¡ãŸããç¹ã«æ¡åŒµæ©èœãã°ããŒãã«ã«é åžããå Žåã¯ãæ³çãªåé¡ãé¿ããããã«ãµãŒãããŒãã£ã©ã€ãã©ãªã®ã©ã€ã»ã³ã¹ãèæ ®ããŠãã ããã
å®å šãªãã©ãŠã¶æ¡åŒµæ©èœéçºã®ããã®ãã¹ããã©ã¯ãã£ã¹
ãã©ãŠã¶æ¡åŒµæ©èœã®æš©éã«é¢é£ãããªã¹ã¯ã軜æžããããã«ãéçºè ã¯ä»¥äžã®ãã¹ããã©ã¯ãã£ã¹ã«åŸãã¹ãã§ãïŒ
1. æå°éã®æš©éãèŠæ±ããïŒæå°æš©éã®ååïŒïŒ
æ¡åŒµæ©èœãæ£ããæ©èœããããã«çµ¶å¯Ÿã«äžå¯æ¬ ãªæš©éã®ã¿ãèŠæ±ããŠãã ãããåæš©éãæ
éã«è©äŸ¡ããããå°ãªãæš©éã§æžã代æ¿ã¢ãããŒãããªããæ€èšããŠãã ãããäŸãã°ããã¹ãŠã®ãŠã§ããµã€ããžã®ã¢ã¯ã»ã¹ïŒ"
ïŒãèŠæ±ãã代ããã«ãç¹å®ã®ãã¡ã€ã³ãžã®ã¢ã¯ã»ã¹ã®ã¿ãèŠæ±ããããåºç¯ãªã¢ã¯ã»ã¹ãå¿
èŠãšããã«ã€ãã³ãã«åå¿ããããã«å®£èšçæš©éã䜿çšããããšãæ€èšããŠãã ãããç¹ã«ããŒã¿ãžã®ã¢ã¯ã»ã¹æ¹æ³ãåŠçæ¹æ³ã«çŠç¹ãåœãŠãŠã培åºçãªã³ãŒãã¬ãã¥ãŒã宿œããŠãã ããã
2. å ¥åå€ã®æ€èšŒãšåºåã®ãµãã¿ã€ãºïŒ
XSSãã³ãŒãã€ã³ãžã§ã¯ã·ã§ã³ã®è匱æ§ãé²ãããã«ãåžžã«ãŠãŒã¶ãŒããæäŸãããå ¥åãæ€èšŒããŠãã ããããŠã§ãããŒãžã«æ³šå ¥ããããAPIåŒã³åºãã§äœ¿çšãããããåã«ãåºåããµãã¿ã€ãºããŠãã ãããå ¥åæ€èšŒãšåºåãµãã¿ã€ãºãæ¯æŽããããã«ã確ç«ãããã»ãã¥ãªãã£ã©ã€ãã©ãªããã¬ãŒã ã¯ãŒã¯ã䜿çšããŠãã ãããäŸãã°ããŠã§ãããŒãžã«æ³šå ¥ããåã«HTMLããµãã¿ã€ãºããããã«ãDOMPurifyã®ãããªã©ã€ãã©ãªã䜿çšããŸãã
3. ã³ã³ãã³ãã»ãã¥ãªãã£ããªã·ãŒïŒCSPïŒïŒ
ã³ã³ãã³ãã»ãã¥ãªãã£ããªã·ãŒïŒCSPïŒã䜿çšããŠãæ¡åŒµæ©èœããªãœãŒã¹ãèªã¿èŸŒãããœãŒã¹ãå¶éããŸããããã«ãããæ»æè
ãæ¡åŒµæ©èœã«æªæã®ããJavaScriptã³ãŒããæ³šå
¥ããèœåãå¶éããããšã§ãXSSæ»æãé²ãã®ã«åœ¹ç«ã¡ãŸãã匷åãªCSPã«ã¯ãscript-src
ãobject-src
ãstyle-src
ãªã©ã®ãã£ã¬ã¯ãã£ããå«ããã¹ã¯ãªããããªããžã§ã¯ããã¹ã¿ã€ã«ã®ãªãªãžã³ãä¿¡é Œã§ãããœãŒã¹ã«å¶éãã¹ãã§ããäŸïŒ"script-src 'self' https://apis.google.com; object-src 'none'"
ã
4. å®å šãªããŒã¿ã¹ãã¬ãŒãžïŒ
æå·åãããã¹ãã¬ãŒãžãæäŸããchrome.storage
APIã䜿çšããŠãæ©å¯ããŒã¿ãå®å
šã«ä¿ç®¡ããŠãã ãããæ¡åŒµæ©èœã®ããŒã«ã«ã¹ãã¬ãŒãžã«æ©å¯ããŒã¿ãå¹³æã§ä¿åããããšã¯é¿ããŠãã ãããæ©å¯ããŒã¿ãããã«ä¿è·ããããã«ãæå·åã©ã€ãã©ãªã®äœ¿çšãæ€èšããŠãã ããããµãŒããŒã«çµ¶å¯Ÿã«ä¿åããªããã°ãªããªãããŒã¿ã«ã€ããŠã¯ãæå·åãã¢ã¯ã»ã¹å¶åŸ¡ã宿çãªã»ãã¥ãªãã£ç£æ»ãå«ãå
ç¢ãªãµãŒããŒãµã€ãã®ã»ãã¥ãªãã£å¯Ÿçã宿œããŠãã ããããŠãŒã¶ãŒããŒã¿ãæ±ãéã¯ãGDPRïŒãšãŒãããïŒãCCPAïŒã«ãªãã©ã«ãã¢ïŒããã®ä»ã®å°åã®ããŒã¿ä¿è·æ³ãªã©ã®ããŒã¿ãã©ã€ãã·ãŒèŠå¶ã«æ³šæããŠãã ããã
5. 宿çãªã»ãã¥ãªãã£ç£æ»ãšã³ãŒãã¬ãã¥ãŒïŒ
æœåšçãªè匱æ§ãç¹å®ãä¿®æ£ããããã«ã宿çãªã»ãã¥ãªãã£ç£æ»ãšã³ãŒãã¬ãã¥ãŒã宿œããŠãã ãããèªåã»ãã¥ãªãã£ã¹ãã£ã³ããŒã«ã䜿çšããŠãäžè¬çãªè匱æ§ãæ€åºããŸããå€éšã®ã»ãã¥ãªãã£å°éå®¶ã«äŸé ŒããŠãäŸµå ¥ãã¹ããè匱æ§è©äŸ¡ã宿œããŠããããŸããè€æ°ã®éçºè ã«ããã³ãŒãã¬ãã¥ãŒã奚å±ããæœåšçãªã»ãã¥ãªãã£äžã®æ¬ é¥ãç¹å®ããã³ãŒãã®å質ãåäžãããŸãããããã®ã»ãã¥ãªãã£ãžã®åãçµã¿ã¯ãè匱æ§ã倿§ãªç°å¢ãèŠå¶ã®æ çµã¿ãè¶ããŠæªçšãããå¯èœæ§ã®ããã°ããŒãã«ãªãŠãŒã¶ãŒããŒã¹ã«ãšã£ãŠç¹ã«éèŠã§ãã
6. ãµãŒãããŒãã£ã©ã€ãã©ãªãææ°ã«ä¿ã€ïŒ
æ¢ç¥ã®è匱æ§ã«ããããåœãŠãããããµãŒãããŒãã£ã®ã©ã€ãã©ãªãšäŸåé¢ä¿ã宿çã«æŽæ°ããŠãã ãããäŸåé¢ä¿ç®¡çããŒã«ã䜿çšããŠãã©ã€ãã©ãªã®æŽæ°ããã»ã¹ãèªååããŸããæ¡åŒµæ©èœã䜿çšããã©ã€ãã©ãªã«åœ±é¿ãäžããæ°ããè匱æ§ã«ã€ããŠãã»ãã¥ãªãã£ã¢ããã€ã¶ãªãè匱æ§ããŒã¿ããŒã¹ãç£èŠããŠãã ãããDependabotãSnykã®ãããªããŒã«ã䜿çšããŠãäŸåé¢ä¿ãèªåçã«è¿œè·¡ã»æŽæ°ããããšãæ€èšããŠãã ããã
7. å®å šãªéä¿¡ïŒ
æ¡åŒµæ©èœãšå€éšãµãŒããŒéã®ãã¹ãŠã®éä¿¡ã«HTTPSã䜿çšããŠãã ãããäžéè æ»æãé²ãããã«ããµãŒããŒã®SSLèšŒææžãæ€èšŒããŠãã ãããTLS 1.3以äžã®å®å šãªéä¿¡ãããã³ã«ã䜿çšããŠãã ãããããŒã¿ããªãœãŒã¹ãžã®äžæ£ã¢ã¯ã»ã¹ããä¿è·ããããã«ãé©åãªèªèšŒã»èªå¯ã¡ã«ããºã ãå®è£ ããŠãã ãããæµ·å€ã®ãŠãŒã¶ãŒãæ±ãå Žåã¯ãéä¿¡ã€ã³ãã©ã倿§ãªãããã¯ãŒã¯ç¶æ³ãæ€é²èŠå¶ã®å¯èœæ§ã«å¯Ÿå¿ã§ããããšã確èªããŠãã ããã
8. ãŠãŒã¶ãŒæè²ãšéææ§ïŒ
æ¡åŒµæ©èœãç¹å®ã®æš©éãå¿ èŠãšããçç±ããŠãŒã¶ãŒã«æç¢ºã«èª¬æããŠãã ãããæ¡åŒµæ©èœã®æ©èœãšãèŠæ±ãããæš©éãã©ã®ããã«äœ¿çšãããã«ã€ããŠè©³çްãªèª¬æãæäŸããŠãã ãããããŒã¿åéã®å®è·µã«ã€ããŠéææ§ãä¿ã¡ããŠãŒã¶ãŒãèªåã®ããŒã¿ã管çã§ããããã«ããŠãã ãããããã«ã¢ã¯ã»ã¹ã§ããæç¢ºã§çè§£ããããèšèã§æžãããïŒçæ³çã«ã¯ç°ãªãå°ååãã«ããŒã«ã©ã€ãºãããïŒãã©ã€ãã·ãŒããªã·ãŒã¯ãä¿¡é Œãç¯ãäžã§éåžžã«éèŠã§ãããŠãŒã¶ãŒãããŒã¿åéããªããã¢ãŠãããããèªåã®ããŒã¿ãåé€ãããããããã®ãªãã·ã§ã³ãæäŸããŠãã ãããã°ããŒãã«ãªå©çšè ã察象ãšããå Žåãèšèªãšèª¬æãã¢ã¯ã»ã¹ãããããæåçã«é æ ®ãããŠããããšã確èªããŠãã ãããæ¡åŒµæ©èœã®èª¬æãæš©éèŠæ±ãè€æ°ã®èšèªã«ç¿»èš³ããããšãæ€èšããŠãã ããã
9. ãµã³ãããã¯ã¹åãšåé¢ïŒ
ãã©ãŠã¶æ¡åŒµæ©èœã¯ãµã³ãããã¯ã¹ç°å¢å
ã§åäœããã·ã¹ãã ãªãœãŒã¹ãžã®ã¢ã¯ã»ã¹ãå¶éãããã©ãŠã¶ãæªæã®ããã³ãŒãããä¿è·ããŸããããããXSSæ»æãé²ãããã«ã¯ãæ¡åŒµæ©èœã®ã³ãŒãããŠã§ãããŒãžã®ã³ã³ããã¹ãããåé¢ããããšãäŸç¶ãšããŠéèŠã§ããåé¢ãããã¯ãŒã«ããæã€ã³ã³ãã³ãã¹ã¯ãªããã䜿çšããŠããŠã§ãããŒãžã®JavaScriptã³ãŒããšã®å¹²æžãé²ããŸããæ»æè
ã«ä»»æã®ã³ãŒããå®è¡ãããå¯èœæ§ã®ããeval()
ããã®ä»ã®æœåšçã«å±éºãªJavaScript颿°ã®äœ¿çšã¯é¿ããŠãã ãããæ¡åŒµæ©èœã®ã³ãŒããããã«åé¢ããããã«ã峿 Œãªã³ã³ãã³ãã»ãã¥ãªãã£ããªã·ãŒïŒCSPïŒãå®è£
ããŠãã ãããå¯èœãªéããæ¡åŒµæ©èœã®ã³ãŒãããŠãŒã¶ãŒæäŸããŒã¿ããåé¢ããŠãã ããã
10. å ±åãšç£èŠïŒ
ã»ãã¥ãªãã£ã€ã³ã·ãã³ããæ€åºããŠå¯Ÿå¿ããããã«ãå ç¢ãªãšã©ãŒå ±åãšç£èŠãå®è£ ããŠãã ãããäžå¯©ãªã¢ã¯ãã£ããã£ããªããæ¡åŒµæ©èœã®ãã°ãç£èŠããŸããæœåšçãªæ»æãç¹å®ããããã«äŸµå ¥æ€ç¥ã·ã¹ãã ãå°å ¥ããŸãããŠãŒã¶ãŒãã»ãã¥ãªãã£è匱æ§ãå ±åã§ããã¡ã«ããºã ãæäŸããŠãã ãããå ±åãããè匱æ§ã«è¿ éã«å¯Ÿå¿ããå¿ èŠã«å¿ããŠã»ãã¥ãªãã£ã¢ããããŒãããªãªãŒã¹ããŠãã ãããã»ãã¥ãªãã£äŸµå®³ã«å¹æçã«å¯ŸåŠããããã®æç¢ºãªã€ã³ã·ãã³ã察å¿èšç»ãçå®ããŠãã ããããã®èšç»ã«ã¯ããŠãŒã¶ãŒãžã®éç¥ã䟵害ã®åœ±é¿ã®è»œæžãå°æ¥ã®ã€ã³ã·ãã³ãã®é²æ¢æé ãå«ããã¹ãã§ããISO 27001ãªã©ã®åœéçãªã»ãã¥ãªãã£åºæºãžã®æºæ ãæ€èšããŠãã ããã
ãã©ãŠã¶æ¡åŒµæ©èœã»ãã¥ãªãã£ã®æªæ¥
ãã©ãŠã¶æ¡åŒµæ©èœã®ç¶æ³ã¯åžžã«é²åããŠãããã»ãã¥ãªãã£ã¯ç¶ç¶çãªæžå¿µäºé ã§ããæ°ããã»ãã¥ãªãã£è åšã宿çã«åºçŸãããã©ãŠã¶ãã³ããŒã¯æ¡åŒµæ©èœã®ã»ãã¥ãªãã£ãåäžãããããã«ç¶ç¶çã«åãçµãã§ããŸãããã©ãŠã¶æ¡åŒµæ©èœã»ãã¥ãªãã£ã®å°æ¥ã®çºå±ã«ã¯ã以äžã®ãããªãã®ãå«ãŸããå¯èœæ§ããããŸãïŒ
- ããè©³çŽ°ãªæš©éïŒ éçºè ãèŠæ±ããæš©éã«å¯ŸããŠããããã现ããå¶åŸ¡ãæäŸããŸãã
- ãµã³ãããã¯ã¹åã®æ¹åïŒ ãã©ãŠã¶ããŠã§ãããŒãžã®ã³ã³ããã¹ãããæ¡åŒµæ©èœãããã«åé¢ããŸãã
- ã³ãŒãåæã®åŒ·åïŒ éçè§£æãåçè§£ææè¡ã䜿çšããŠãæ¡åŒµæ©èœã³ãŒãã®è匱æ§ãæ€åºããŸãã
- ãŠãŒã¶ãŒã®æèåäžïŒ æ¡åŒµæ©èœã«é¢é£ããã»ãã¥ãªãã£ãªã¹ã¯ã«ã€ããŠãŠãŒã¶ãŒã«ããå€ãã®æ å ±ãæäŸããã©ã®æ¡åŒµæ©èœãã€ã³ã¹ããŒã«ãããã«ã€ããŠæ å ±ã«åºã¥ããæ±ºå®ãäžããããã«ããŸãã
- 圢åŒçæ€èšŒïŒ æ¡åŒµæ©èœã³ãŒãã®æ£ãããšã»ãã¥ãªãã£ã蚌æããããã«æ°åŠçææ³ãæ¡çšããŸãã
çµè«
ãã©ãŠã¶æ¡åŒµæ©èœã®ã»ãã¥ãªãã£ã¯ãè€éã§å€é¢çãªèª²é¡ã§ãããã©ãŠã¶æ¡åŒµæ©èœãæ¯ããã»ãã¥ãªãã£ã¢ãã«ãçè§£ããå®å šãªéçºã®ããã®ãã¹ããã©ã¯ãã£ã¹ã«åŸããæ°ããªã»ãã¥ãªãã£è åšã«ã€ããŠåžžã«æ å ±ãåŸãããšã§ãéçºè ã¯ãŠãŒã¶ãŒã®ãã©ã€ãã·ãŒãšã»ãã¥ãªãã£ãæãªãããšãªããŠãŒã¶ãŒäœéšãåäžããããå®å šã§ä¿¡é Œæ§ã®é«ãæ¡åŒµæ©èœãæ§ç¯ã§ããŸããã°ããŒãã«ãªå©çšè ã察象ãšããå ŽåãããŒã«ã©ã€ãŒãŒã·ã§ã³ãæåçé æ ®ãåœéçãªããŒã¿ãã©ã€ãã·ãŒèŠå¶ã®éµå®ã¯ãä¿¡é Œãç¯ãã責任ããéçºã確å®ã«ããäžã§æãéèŠã§ããã»ãã¥ãªãã£ç¬¬äžã®èãæ¹ãåãå ¥ããããšã§ãéçºè ã¯ãã¹ãŠã®äººã«ãšã£ãŠããå®å šã§å®å¿ãªãŠã§ãã«è²¢ç®ããããšãã§ããŸãã