è€éãªJavaScriptãã¬ãŒã ã¯ãŒã¯ã®ã»ãã¥ãªãã£ãããã²ãŒããå®å šã§ä¿¡é Œæ§ã®é«ãã¢ããªã±ãŒã·ã§ã³éçºã©ã€ããµã€ã¯ã«ã®ããã«ãããã±ãŒãžã®è匱æ§ã广çã«ç¹å®ã軜æžã管çããæ¹æ³ãåŠã³ãŸãã
JavaScriptãã¬ãŒã ã¯ãŒã¯ãšã³ã·ã¹ãã ïŒããã±ãŒãžè匱æ§ç®¡çã®å æ¬çã¬ã€ã
掻æ°ã«æºã¡ãæ¥éã«é²åããã©ã³ãã¹ã±ãŒãã§ããJavaScriptãšã³ã·ã¹ãã ã¯ãçŸä»£ã®Webã®å€§éšåãæ¯ããŠããŸããã·ã³ã°ã«ããŒãžã¢ããªã±ãŒã·ã§ã³ããè€éãªãšã³ã¿ãŒãã©ã€ãºãœãªã¥ãŒã·ã§ã³ãŸã§ãJavaScriptãã¬ãŒã ã¯ãŒã¯ã¯å€ãã®é©æ°çãªããžã¿ã«äœéšã®åååãšãªã£ãŠããŸãããããããã®ãã€ãããºã ã¯è€éãããããããç¹ã«ããã±ãŒãžã®è匱æ§ç®¡çã«ãããŠã¯ãã¢ããªã±ãŒã·ã§ã³ã®ã»ãã¥ãªãã£ãšä¿¡é Œæ§ã確ä¿ããäžã§éèŠãªåŽé¢ãšãªããŸãã
ããã±ãŒãžè匱æ§ã®ç¯å²ãçè§£ãã
JavaScriptãããžã§ã¯ãã¯ãæ©èœãæäŸããéçºãå éãããéçºæéãççž®ããããã«ãäŸåé¢ä¿ãšããŠãç¥ããããµãŒãããŒãã£ã®ããã±ãŒãžã«å€§ããäŸåããŠããŸãããããã®ããã±ãŒãžã¯ãnpmïŒNode Package ManagerïŒãyarnãªã©ã®ããã±ãŒãžãããŒãžã£ã«ãã£ãŠç®¡çãããå€ãã¯ãªãŒãã³ãœãŒã¹ã§ãããäžçäžã®å€æ§ãªã³ãã¥ããã£ã«ãã£ãŠç¶æãããŠããŸãããã®ãªãŒãã³ãªæ§è³ªã¯ãã€ãããŒã·ã§ã³ãä¿é²ããäžæ¹ã§ãã»ãã¥ãªãã£ãªã¹ã¯ããããããŸãããããã®äŸåé¢ä¿ã®è匱æ§ã¯ãã¢ããªã±ãŒã·ã§ã³ã以äžã®ãããªæ§ã ãªè åšã«ãããå¯èœæ§ããããŸãã
- ã¯ãã¹ãµã€ãã¹ã¯ãªããã£ã³ã°ïŒXSSïŒïŒæ»æè ãä»ã®ãŠãŒã¶ãŒãé²èЧãããŠã§ãããŒãžã«æªæã®ããã¹ã¯ãªãããæ³šå ¥ããŸãã
- ãªã¢ãŒãã³ãŒãå®è¡ïŒRCEïŒïŒæ»æè ããµãŒããŒäžã§ä»»æã®ã³ãŒããå®è¡ããã·ã¹ãã ã®å¶åŸ¡ã奪ãå¯èœæ§ããããŸãã
- ãµãŒãã¹æåŠïŒDoSïŒïŒæ»æè ããµãŒããŒã«éè² è·ããããæ£èŠã®ãŠãŒã¶ãŒãã¢ããªã±ãŒã·ã§ã³ãå©çšã§ããªãããŸãã
- æ å ±æŒæŽ©ïŒæ»æè ããŠãŒã¶ãŒèªèšŒæ å ±ãå人æ å ±ãªã©ã®æ©å¯ããŒã¿ã«ã¢ã¯ã»ã¹ããŸãã
ãã®åé¡ã®èŠæš¡ã¯é倧ã§ããnpmãyarnã§ã¯æ°çŸäžã®ããã±ãŒãžãå©çšå¯èœã§ãããæ°ããè匱æ§ãæ¯æ¥çºèŠãããŠããŸããæ å ±ãåžžã«ææ¡ããç©æ¥µçã«è¡åããããšã¯ãæ§ã ãªå°ççãã±ãŒã·ã§ã³ãããžãã¹ã»ã¯ã¿ãŒã«ãŸããããããããèŠæš¡ã®éçºè ãçµç¹ã«ãšã£ãŠæ¥µããŠéèŠã§ãã
è匱æ§ç®¡çã«ãããäž»èŠãªæŠå¿µ
广çãªè匱æ§ç®¡çã«ã¯ãããã€ãã®äž»èŠãªæŠå¿µãå«ãå€é¢çãªã¢ãããŒããå¿ èŠã§ãã
1. äŸåé¢ä¿ã®åæ
æåã®ã¹ãããã¯ããããžã§ã¯ãã䜿çšããŠããäŸåé¢ä¿ãçè§£ããããšã§ããããã«ã¯ããã¹ãŠã®çŽæ¥çãªäŸåé¢ä¿ãšæšç§»çãªäŸåé¢ä¿ïŒäŸåé¢ä¿ã®äŸåé¢ä¿ïŒãç¹å®ããããšãå«ãŸããŸããnpmãyarnã®ãããªããã±ãŒãžãããŒãžã£ã¯ããããã®äŸåé¢ä¿ããªã¹ãã¢ããããããŒã«ãæäŸããŠããããã°ãã°ããªãŒæ§é ã§æŽçãããŸãããããžã§ã¯ãã®package.json
ãã¡ã€ã«ã¯ããããã®äŸåé¢ä¿ã管çããããã®äžå¿çãªãªããžããªã§ãããã®ãã¡ã€ã«ã調æ»ããããšãäžå¯æ¬ ã§ããäŸåé¢ä¿åæã®ããã®ããŒã«ãšãã¯ããã¯ã«ã¯ã以äžã®ãããªãã®ããããŸãã
- npmãŸãã¯yarnã³ãã³ãã®äœ¿çšïŒ
npm list
ãŸãã¯yarn list
ã¯è©³çŽ°ãªæŠèŠãæäŸããŸãã - äŸåé¢ä¿ã°ã©ãã®èŠèŠåïŒ
depcheck
ã®ãããªããŒã«ã¯ãäŸåé¢ä¿ããªãŒãèŠèŠåããã®ã«åœ¹ç«ã¡ãŸãã - å°éã®ã»ãã¥ãªãã£ããŒã«ïŒSnykãSonatype Nexus LifecycleãWhiteSourceïŒçŸMendïŒãªã©ã®ããŒã«ã¯ãå æ¬çãªäŸåé¢ä¿åæãè匱æ§ã¹ãã£ã³ãããã³ä¿®æ£ã®æšå¥šãæäŸããŸãã
2. è匱æ§ã¹ãã£ã³
è匱æ§ã¹ãã£ãã¯ãNational Vulnerability DatabaseïŒNVDïŒãCommon Vulnerabilities and ExposuresïŒCVEïŒããŒã¿ããŒã¹ãªã©ã®æ¢ç¥ã®è匱æ§ããŒã¿ããŒã¹ã«å¯ŸããŠããããžã§ã¯ãã®äŸåé¢ä¿ãèªåçã«åæããŸããè匱ãªããã±ãŒãžãç¹å®ããè匱æ§ã®æ·±å»åºŠãæœåšçãªä¿®æ£æŠç¥ã«é¢ããæ å ±ãæäŸããŸããããã€ãã®ã¹ãã£ã³ããŒã«ãååšããç¶ç¶çãªã»ãã¥ãªãã£ç£èŠã®ããã«CI/CDãã€ãã©ã€ã³ïŒç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³/ç¶ç¶çãããã€ã¡ã³ãïŒã«çµ±åãããããšãå€ãã§ãã
- npm auditïŒnpmãããžã§ã¯ãçšã®çµã¿èŸŒã¿è匱æ§ã¹ãã£ãã
npm audit
ãå®è¡ããŠè匱æ§ããã§ãã¯ããããã€ãã®åé¡ãèªåçã«ä¿®æ£ããŸãã - SnykïŒæ§ã ãªãã©ãããã©ãŒã ãšçµ±åããä¿®æ£ã®æšå¥šãèªåä¿®æ£ïŒãã°ãã°ãã«ãªã¯ãšã¹ããéããŠïŒãå«ã詳现ãªè匱æ§ã¬ããŒããæäŸãã人æ°ã®åçšããŒã«ã§ãã
- SonarQubeïŒèåŒ±æ§æ€åºæ©èœãæäŸãããã³ãŒãå質ãšã»ãã¥ãªãã£åæã®ããã®åºã䜿çšãããŠãããã©ãããã©ãŒã ã§ãã
- OWASP Dependency-CheckïŒãããžã§ã¯ãã®äŸåé¢ä¿ãç¹å®ããå ¬ã«é瀺ãããè匱æ§ããã§ãã¯ãããªãŒãã³ãœãŒã¹ããŒã«ã§ãã
3. åªå é äœä»ããšãªã¹ã¯è©äŸ¡
ãã¹ãŠã®è匱æ§ãåããªã¹ã¯ãããããããã§ã¯ãããŸããã以äžã®ãããªèŠçŽ ã«åºã¥ããŠè匱æ§ã«åªå é äœãä»ããããšãéèŠã§ãã
- æ·±å»åºŠïŒè匱æ§ã¯éåžžããã®æ·±å»åºŠïŒäŸïŒã¯ãªãã£ã«ã«ãé«ãäžãäœïŒã«åºã¥ããŠåé¡ãããŸããCommon Vulnerability Scoring SystemïŒCVSSïŒã¯ãæšæºåãããã¹ã³ã¢ãªã³ã°ã·ã¹ãã ãæäŸããŸãã
- æªçšã®å¯èœæ§ïŒãã®è匱æ§ã¯ã©ããããç°¡åã«æªçšããããïŒ
- 圱é¿ïŒæªçšãæåããå Žåã®æœåšçãªåœ±é¿ã¯äœãïŒïŒäŸïŒããŒã¿äŸµå®³ãã·ã¹ãã 䟵害ïŒ
- 圱é¿ãåããã³ã³ããŒãã³ãïŒã¢ããªã±ãŒã·ã§ã³ã®ã©ã®éšåã圱é¿ãåãããïŒ
- å©çšå¯èœãªä¿®æ£ïŒããããã¢ããããŒãã¯å©çšå¯èœãïŒ
ãªã¹ã¯è©äŸ¡ã¯ãã©ã®è匱æ§ã峿ã®å¯Ÿå¿ãå¿ èŠãšãããã倿ããã®ã«åœ¹ç«ã¡ãŸããã³ã¢ã³ã³ããŒãã³ãã«åœ±é¿ãäžããã¯ãªãã£ã«ã«ããã³é«æ·±å»åºŠã®è匱æ§ã¯ãéåžžãåªå ãããŸããäœæ·±å»åºŠã®è匱æ§ã¯ãåŸã§å¯ŸåŠãããããä»ã®ã»ãã¥ãªãã£å¯ŸçãéããŠè»œæžãããå¯èœæ§ããããŸãã
4. ä¿®æ£
ä¿®æ£ãšã¯ãç¹å®ãããè匱æ§ãä¿®æ£ãŸãã¯è»œæžããããã»ã¹ã§ããäžè¬çãªä¿®æ£æŠç¥ã«ã¯ã以äžã®ãããªãã®ããããŸãã
- äŸåé¢ä¿ã®æŽæ°ïŒæãäžè¬çãªã¢ãããŒãã¯ãè匱ãªããã±ãŒãžãææ°ããŒãžã§ã³ã«æŽæ°ããããšã§ããããã±ãŒãžãããŒãžã£ã¯ãã®ããã»ã¹ãç°¡çŽ åãããã°ãã°åäžã®ã³ãã³ãïŒäŸïŒ
npm update
ãyarn upgrade
ïŒã§ææ°ããŒãžã§ã³ã«æŽæ°ã§ããŸãã - ãããé©çšïŒã¢ããããŒããå©çšã§ããªãããäºææ§ã®åé¡ãåŒãèµ·ããå Žåãè匱ãªã³ãŒãã«ããããé©çšããããšãéžæè¢ãšãªããŸããããã«ã¯ãããã±ãŒãžã®ã¡ã³ãããŒãæäŸããã»ãã¥ãªãã£ããããé©çšããããã«ã¹ã¿ã ããããäœæããããšãå«ãŸããŸãã
- äŸåé¢ä¿ã®åºå®ïŒããã³ã°ïŒïŒäŸåé¢ä¿ãç¹å®ã®ããŒãžã§ã³ã«åºå®ããããšã§ãæ°ããè匱æ§ãå°å
¥ããäºæãã¬ã¢ããããŒããé²ãããšãã§ããŸããããã¯ã
package.json
ã§æ£ç¢ºãªããŒãžã§ã³çªå·ãæå®ããããšã§å®çŸãããŸãã - è匱æ§ã®ç·©åïŒæŽæ°ããããé©çšãããã«å®è¡ã§ããªãå Žåãå ¥åæ€èšŒãåºåãšã³ã³ãŒãã£ã³ã°ãã¢ã¯ã»ã¹å¶åŸ¡ãªã©ã®ä»ã®ã»ãã¥ãªãã£å¯ŸçãéããŠè匱æ§ãç·©åããããšãæ€èšããŸãã
- æªäœ¿çšã®äŸåé¢ä¿ã®åé€ïŒæ»æå¯Ÿè±¡é åãæžããããã«ãæªäœ¿çšã®äŸåé¢ä¿ãæé€ããŸãã
5. ç£èŠãšç¶ç¶çæ¹å
è匱æ§ç®¡çã¯ç¶ç¶çãªããã»ã¹ã§ããäŸåé¢ä¿ã®å®æçãªç£èŠãšã¿ã€ã ãªãŒãªãããé©çšãäžå¯æ¬ ã§ãã以äžã®å®è·µã¯ãã»ãã¥ãªãã£äœå¶ãåäžãããŸãã
- èªåã¹ãã£ã³ïŒCI/CDãã€ãã©ã€ã³ã«è匱æ§ã¹ãã£ã³ãçµ±åãããã¹ãŠã®ã³ãŒã倿Žã§è匱æ§ãèªåçã«ãã§ãã¯ããŸãã
- 宿çãªã»ãã¥ãªãã£ç£æ»ïŒå®æçã«ã»ãã¥ãªãã£ç£æ»ã宿œããèªåã¹ãã£ã³ã§èŠéãããå¯èœæ§ã®ããè匱æ§ãç¹å®ãã察åŠããŸãã
- æ å ±åéã®ç¶ç¶ïŒã»ãã¥ãªãã£ã¢ã©ãŒããã¡ãŒãªã³ã°ãªã¹ãã«ç»é²ããŠãæ°ããè匱æ§ãã»ãã¥ãªãã£ã®ãã¹ããã©ã¯ãã£ã¹ã«é¢ããæ å ±ãåžžã«ææ¡ããŸããäŸãšããŠãnpmã»ãã¥ãªãã£ã¢ããã€ã¶ãªã¡ãŒãªã³ã°ãªã¹ããªã©ããããŸãã
- ã»ãã¥ãªãã£ãã¬ãŒãã³ã°ïŒéçºããŒã ã«ã»ãã¥ãªãã£ãã¬ãŒãã³ã°ãæäŸããã»ãã¥ãªãã£ã®è åšããã¹ããã©ã¯ãã£ã¹ã«å¯Ÿããæèãé«ããŸãã
- å®å šãªãœãããŠã§ã¢ãµãã©ã€ãã§ãŒã³ã®ç¶æïŒããŠã³ããŒãããããã±ãŒãžã®æŽåæ§ãæ€èšŒãããã眲åä»ãããã±ãŒãžã䜿çšãããªã©ããµãã©ã€ãã§ãŒã³ã»ãã¥ãªãã£ã®ãã¹ããã©ã¯ãã£ã¹ãå®è£ ããŸãã
å®è·µäŸãšãã¹ããã©ã¯ãã£ã¹
ããã±ãŒãžã®è匱æ§ã管çããããã®å®è·µäŸãšãã¹ããã©ã¯ãã£ã¹ãããã€ãèŠãŠãããŸãããã
äŸïŒnpmã§ã®äŸåé¢ä¿ã®æŽæ°
1. npm audit
ã®å®è¡ïŒãã®ã³ãã³ãã¯ããããžã§ã¯ãã®æ¢ç¥ã®è匱æ§ãã¹ãã£ã³ããŸããèŠã€ãã£ãè匱æ§ã®ã¬ããŒããæäŸãããã®æ·±å»åºŠãšä¿®æ£æ¡ãå«ãŸããŸãã
2. ã¬ããŒãã®åæïŒnpm audit
ã¬ããŒããæ³šææ·±ã確èªããŸããè匱æ§ãç¹å®ãããã®æ·±å»åºŠãšåœ±é¿ã«åºã¥ããŠåªå
é äœãä»ããŸãã
3. è匱ãªããã±ãŒãžã®æŽæ°ïŒ
* èªåä¿®æ£å¯èœãªåé¡ïŒnpm audit fix
ã¯ãããã±ãŒãžãææ°ã®äºæããŒãžã§ã³ã«æŽæ°ããããšã§ãè匱æ§ãèªåçã«ä¿®æ£ããããšããŸããããã¯å€ãã®äžè¬çãªè匱æ§ã«å¯Ÿããè¿
éãã€ç°¡åãªè§£æ±ºçã§ãããã ããããã«ããã³ãŒãã®äžéšã倿Žãããå¯èœæ§ãããããšã«æ³šæããŠãã ããã
* ããã±ãŒãžã®æåæŽæ°ïŒããè€éãªã±ãŒã¹ã§ã¯ãnpm update [package-name]
ã䜿çšããŠãè匱ãªããã±ãŒãžãææ°ããŒãžã§ã³ã«æåã§æŽæ°ããŸãããã®ã³ãã³ãã¯ãæå®ãããããã±ãŒãžãpackage.json
ãã¡ã€ã«ã®ããŒãžã§ã³èŠä»¶ãšäºææ§ã®ããææ°ããŒãžã§ã³ã«æŽæ°ããŸããäŸåé¢ä¿ãæŽæ°ããåŸã¯ãã¢ããªã±ãŒã·ã§ã³ããã¹ãããæºåãããŠãã ããã
* ãã¹ãŠã®äŸåé¢ä¿ã®æŽæ°ïŒnpm update
ã䜿çšããŠãã¹ãŠã®ããã±ãŒãžãææ°ããŒãžã§ã³ã«æŽæ°ããŸãããããã¯éåžžããªã¹ã¯ã®é«ãæäœã§ããç«¶åããªãã確èªããé »ç¹ã«ãã¹ãããªãããæ®µéçã«è¡ãããšããå§ãããŸãã
4. ã¢ããªã±ãŒã·ã§ã³ã®ãã¹ãïŒäŸåé¢ä¿ãæŽæ°ããåŸãã¢ããªã±ãŒã·ã§ã³ã培åºçã«ãã¹ãããŠãæŽæ°ãäºææ§ã®åé¡ãæ©èœã®ç Žå£ãåŒãèµ·ãããŠããªãããšã確èªããŸããããã«ã¯ãåäœãã¹ããçµ±åãã¹ãããŠãŒã¶ãŒåãå ¥ããã¹ããå«ãŸããå ŽåããããŸãã
5. 倿Žã®ã³ãããïŒpackage.json
ãšpackage-lock.json
ãã¡ã€ã«ïŒãŸãã¯yarn.lock
ïŒãžã®å€æŽãããŒãžã§ã³ç®¡çã«ã³ãããããŸãã
äŸïŒäŸåé¢ä¿ã®åºå®ïŒããã³ã°ïŒ
äŸåé¢ä¿ã®åºå®ã¯ãäŸåé¢ä¿ã«æ£ç¢ºãªããŒãžã§ã³çªå·ãæå®ããŠãäºæãã¬æŽæ°ãé²ããç°ãªãç°å¢éã§ã®äžè²«æ§ã確ä¿ããããšã§ããäŸãã°ïŒ
以äžã®ããã«ãã代ããã«ïŒ
"express": "^4.17.0"
以äžã䜿çšããŸãïŒ
"express": "4.17.1"
ããã«ãããexpress
ããã±ãŒãžã¯åžžã«ããŒãžã§ã³4.17.1ã§ããããšãä¿èšŒãããè匱æ§ãå°å
¥ããå¯èœæ§ã®ããæ°ããããŒãžã§ã³ãžã®æå³ããªãæŽæ°ãé²ããŸããããã³ã°ã¯ãç¹ã«æ¬çªç°å¢ã§ã®æå³ããªãæŽæ°ãé²ãã®ã«äŸ¡å€ããããŸãããã ããåºå®ãããããŒãžã§ã³ã¯å®æçã«æŽæ°ããå¿
èŠããããŸãããããªããã°ãã»ãã¥ãªãã£ä¿®æ£ãæ¬çªã€ã³ã¹ã¿ã³ã¹ã«å±ããŸããã
äŸïŒèªååãããè匱æ§ç®¡çã®ããã®Snykã®æŽ»çš
SnykïŒãŸãã¯åæ§ã®åçšããŒã«ïŒã¯ãè匱æ§ç®¡çã«å¯Ÿããåçåãããã¢ãããŒããæäŸããŸãã
1. ãããžã§ã¯ãã®æ¥ç¶ïŒãœãŒã¹ã³ãŒããªããžããªïŒäŸïŒGitHubãGitLabãBitbucketïŒã«æ¥ç¶ããŠãSnykããããžã§ã¯ãã«çµ±åããŸãã
2. èªåã¹ãã£ã³ïŒSnykã¯ãããžã§ã¯ãã®è匱æ§ãèªåçã«ã¹ãã£ã³ããè匱ãªããã±ãŒãžãç¹å®ããŸãã
3. è匱æ§ã¬ããŒãïŒSnykã¯ãè匱æ§ã«é¢ããæ å ±ããã®æ·±å»åºŠãããã³æœåšçãªä¿®æ£æŠç¥ãå«ã詳现ãªè匱æ§ã¬ããŒããçæããŸããSnykã¯ãã°ãã°çŽæ¥çãªã¢ããã°ã¬ãŒããã¹ãå«ã¿ãŸãã
4. èªåä¿®æ£ïŒSnykã¯å€ãã®è匱æ§ã«å¯ŸããŠèªåä¿®æ£ãã«ãªã¯ãšã¹ããæäŸãããããããŒãžããããšã§è匱ãªããã±ãŒãžãèªåçã«æŽæ°ã§ããŸããããã«ãããä¿®æ£ããã»ã¹ãå€§å¹ ã«åçåãããŸãã
5. ç¶ç¶çãªç£èŠïŒSnykã¯ãããžã§ã¯ããç¶ç¶çã«ç£èŠããæ°ããåé¡ãçºçãããšãã«ã¢ã©ãŒããéä¿¡ããŸãã
ã°ããŒãã«ãªã¢ããªã±ãŒã·ã§ã³éçºã®ããã®ãã¹ããã©ã¯ãã£ã¹
ãããã®ãã©ã¯ãã£ã¹ãå®è£ ããããšã§ãçµç¹ã®ã»ãã¥ãªãã£äœå¶ãåäžããŸãã
- 宿çãªäŸåé¢ä¿ã®æŽæ°ïŒäŸåé¢ä¿ãææ°ããŒãžã§ã³ã«æŽæ°ããããã®å®æçãªã¹ã±ãžã¥ãŒã«ã確ç«ããã»ãã¥ãªãã£ãããã«è¿ éã«å¯Ÿå¿ããŸããDependabotïŒGitHubã®äžéšïŒãRenovateã®ãããªããŒã«ã䜿çšããŠãäŸåé¢ä¿ã®æŽæ°ãèªååããããšãæ€èšããŠãã ããã
- ã»ãã¥ãªãã£ç£æ»ïŒéçºãµã€ã¯ã«ã®äžç°ãšããŠå®æçãªã»ãã¥ãªãã£ç£æ»ãå«ããŸãã
- éçã³ãŒãè§£æïŒéçã³ãŒãè§£æããŒã«ã䜿çšããŠãã³ãŒãã®è匱æ§ãã»ãã¥ãªãã£äžã®æ¬ é¥ãããã³ã³ãŒãå質ã®åé¡ãã¹ãã£ã³ããŸãã
- å ¥åæ€èšŒãšåºåãšã³ã³ãŒãã£ã³ã°ïŒXSSãSQLã€ã³ãžã§ã¯ã·ã§ã³ãªã©ã®äžè¬çãªWebã»ãã¥ãªãã£è匱æ§ãé²ãããã«ãåžžã«ãŠãŒã¶ãŒå ¥åãæ€èšŒããåºåããšã³ã³ãŒãããŸãã
- æå°æš©éã®ååïŒãŠãŒã¶ãŒãšã¢ããªã±ãŒã·ã§ã³ã«ã¯ãå¿ èŠæå°éã®æš©éã®ã¿ãä»äžããŸãã
- å®å šãªèšå®ïŒWebãµãŒããŒãšã¢ããªã±ãŒã·ã§ã³ç°å¢ãå®å šã«èšå®ããŸãã
- å®å šãªéçºãã©ã¯ãã£ã¹ïŒéçºè ã«å®å šãªã³ãŒãã£ã³ã°ãã©ã¯ãã£ã¹ãšã»ãã¥ãªãã£ã®ãã¹ããã©ã¯ãã£ã¹ã«é¢ãããã¬ãŒãã³ã°ãè¡ããŸããéçºã«ãããŠã»ãã¥ãªãã£ç¬¬äžã®èãæ¹ãæ¡çšããŸãã
- ã»ãã¥ãªãã£ã«éç¹ã眮ããCI/CDã®äœ¿çšïŒCI/CDã·ã¹ãã ã«ã¯ãããã»ã¹å šäœãéããŠã»ãã¥ãªãã£ã¹ãã£ã³ãå«ããã¹ãã§ãã
- ããã¥ã¡ã³ããŒã·ã§ã³ïŒãã¹ãŠã®ã»ãã¥ãªãã£ãã©ã¯ãã£ã¹ãšããªã·ãŒãææžåããŸãã
- ã€ã³ã·ãã³ã察å¿èšç»ïŒã»ãã¥ãªãã£äŸµå®³ãè匱æ§ãçºçããéã«å¯ŸåŠããããã®ã€ã³ã·ãã³ã察å¿èšç»ãæºåããŠãããŸãã
é©åãªããŒã«ãšãã¯ãããžãŒã®éžæ
è匱æ§ç®¡çã®ããã®ããŒã«ãšãã¯ãããžãŒã®éžæã¯ããããžã§ã¯ãã®èŠæš¡ãäŸåé¢ä¿ã®è€éããããŒã ã®å°éç¥èãªã©ãããã€ãã®èŠå ã«äŸåããŸãã
- npm auditïŒnpmããŒã«ãã§ãŒã³ã«çµã¿èŸŒãŸããŠãããnpmãããžã§ã¯ãã®è¯ãåºçºç¹ã§ãã
- SnykïŒåŒ·åãªèªååãšã¬ããŒãæ©èœãåããå æ¬çãªãã©ãããã©ãŒã ãnpmãyarnããã®ä»ã®ããã±ãŒãžãããŒãžã£ãããã³æ§ã ãªããã°ã©ãã³ã°èšèªããµããŒãããŠãããç°ãªãèšèªããã¬ãŒã ã¯ãŒã¯ã䜿çšããäŒæ¥ã«ç¹ã«é©ããŠããŸãã
- SonarQubeïŒã³ãŒãå質ãšã»ãã¥ãªãã£åæã®ããã®å æ¬çãªããŒã«ã§ãã
- OWASP Dependency-CheckïŒåªãããªãŒãã³ãœãŒã¹ã®éžæè¢ã§ãã
- ããã±ãŒãžãããŒãžã£ïŒnpmãyarnã§å©çšå¯èœãªãã€ãã£ãã®ã»ãã¥ãªãã£ããŒã«ã掻çšããŸãã
ããŒã«ãéžæããéã«ã¯ã以äžã®èŠçŽ ãèæ ®ããŠãã ããã
- 䜿ããããïŒããŒã«ã¯çµ±åããããã䜿ããããã¹ãã§ãã
- èªååæ©èœïŒã¹ãã£ã³ãä¿®æ£ãç£èŠãªã©ã®ã¿ã¹ã¯ãèªååããããŒã«ãæ¢ããŸãã
- ã¬ããŒããšåæïŒããŒã«ã¯ãå®è¡å¯èœãªæšå¥šäºé ãå«ãæç¢ºã§ç°¡æœãªã¬ããŒããæäŸãã¹ãã§ãã
- çµ±åïŒããŒã«ã¯ãæ¢åã®éçºã¯ãŒã¯ãããŒãCI/CDãã€ãã©ã€ã³ãšã·ãŒã ã¬ã¹ã«çµ±åã§ããã¹ãã§ãã
- ã³ã¹ãïŒããŒã«ã®ã³ã¹ããšãã®ã©ã€ã»ã³ã¹ãªãã·ã§ã³ãèæ ®ããŸãããªãŒãã³ãœãŒã¹ããŒã«ã¯ãå°èŠæš¡ãªããŒã ã«ãšã£ãŠçŽ æŽãããéžæè¢ã§ãã
ããã¢ã¯ãã£ããªã¢ãããŒãã®éèŠæ§
ããã±ãŒãžã®è匱æ§ç®¡çã¯äžåºŠããã®ã¿ã¹ã¯ã§ã¯ãããŸãããç¶ç¶çãªããã»ã¹ã§ãããªã¹ã¯ã軜æžããå®å šãªã¢ããªã±ãŒã·ã§ã³ãç¶æããããã«ã¯ãããã¢ã¯ãã£ããªã¢ãããŒããéµãšãªããŸããããã«ã¯ä»¥äžãå«ãŸããŸãã
- ã·ããã¬ããïŒãœãããŠã§ã¢éçºã©ã€ããµã€ã¯ã«ïŒSDLCïŒã®æ©ã段éã«ã»ãã¥ãªãã£ãçµ±åããŸããããã«ã¯ãå®å šãªèšèšãå®å šãªã³ãŒãã£ã³ã°ãéçºäžã®ã»ãã¥ãªãã£ãã¹ããå«ãŸããŸãã
- æ å ±åéã®ç¶ç¶ïŒææ°ã®ã»ãã¥ãªãã£è åšãè匱æ§ããã¹ããã©ã¯ãã£ã¹ãåžžã«ææ¡ããŸããã»ãã¥ãªãã£ããã°ããã©ããŒããã»ãã¥ãªãã£ãã¥ãŒã¹ã¬ã¿ãŒã賌èªããæ¥çã€ãã³ãã«åå ããŸãã
- ã»ãã¥ãªãã£æåã®éžæïŒéçºããŒã ãšçµç¹å ã§ã»ãã¥ãªãã£æèã®é«ãæåãä¿é²ããŸããéçºè ã«ã»ãã¥ãªãã£ãåªå ããæœåšçãªè匱æ§ãå ±åãããã奚å±ããŸãã
- 宿çãªãã¬ãŒãã³ã°ïŒéçºããŒã ã«ç¶ç¶çãªã»ãã¥ãªãã£ãã¬ãŒãã³ã°ãæäŸããç¥èãšã¹ãã«ãææ°ã®ç¶æ ã«ä¿ã¡ãŸããããã«ã¯ãå®å šãªã³ãŒãã£ã³ã°ãã©ã¯ãã£ã¹ãè匱æ§åæãã€ã³ã·ãã³ã察å¿ã«é¢ããã³ãŒã¹ãå«ãŸããå ŽåããããŸãã
ãããã®ãã©ã¯ãã£ã¹ãå®è£ ããããšã§ãçµç¹ã¯ã»ãã¥ãªãã£äŸµå®³ã®ãªã¹ã¯ãå€§å¹ ã«åæžããã¢ããªã±ãŒã·ã§ã³ãšããŒã¿ãæœåšçãªæ»æããä¿è·ããããšãã§ããŸãã
çµè«
ããã±ãŒãžã®è匱æ§ç®¡çã¯ãçŸä»£ã®Webéçºã«ãããŠæ¥µããŠéèŠãªåŽé¢ã§ããJavaScriptãšã³ã·ã¹ãã ã®ãµãŒãããŒãã£ããã±ãŒãžãžã®äŸåã¯ãå€å€§ãªæ©äŒãšé倧ãªã»ãã¥ãªãã£äžã®èª²é¡ã®äž¡æ¹ããããããŸããåé¡ã®ç¯å²ãçè§£ããå ç¢ãªè匱æ§ç®¡çãã©ã¯ãã£ã¹ãå®è£ ããé©åãªããŒã«ãå©çšããããã¢ã¯ãã£ããªã¢ãããŒããæ¡çšããããšã§ãéçºè ã¯ã¢ããªã±ãŒã·ã§ã³ã®ã»ãã¥ãªãã£ãšä¿¡é Œæ§ãå€§å¹ ã«åäžãããããšãã§ããŸããéçºè ã®ã°ããŒãã«ã³ãã¥ããã£ã¯ãåžžã«èŠæãæ ãããç¥èãå ±æããååããŠãçµ¶ããé²åããè åšã®ã©ã³ãã¹ã±ãŒãããWebãä¿è·ããå¿ èŠããããŸããç¶ç¶çãªåŠç¿ãé©å¿ããããŠã»ãã¥ãªãã£ãžã®ã³ãããã¡ã³ãã¯ãäžçäžã®ãŠãŒã¶ãŒã®ããã«å®å šã§ä¿¡é Œã§ããã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«äžå¯æ¬ ã§ãã