npm auditã䜿çšããŠãããã³ããšã³ãJavaScriptãããžã§ã¯ããç©æ¥µçã«ä¿è·ããæ¹æ³ãåŠã³ãŸããããè匱æ§ã¹ãã£ã³ã修埩ãå®å šãªäŸåé¢ä¿ç®¡çã¯ãŒã¯ãããŒã®ãã¹ããã©ã¯ãã£ã¹ã解説ããŸãã
ããã³ããšã³ãnpm audit: JavaScriptäŸåé¢ä¿ã®ã»ãã¥ãªãã£ä¿è·
仿¥ã®æ¥éã«å€åãããœãããŠã§ã¢éçºã®ç¶æ³ã«ãããŠãã»ãã¥ãªãã£ã¯æéèŠäºé
ã§ããã¢ããªã±ãŒã·ã§ã³ã®ãŠãŒã¶ãŒåãéšåã§ããããã³ããšã³ããäŸå€ã§ã¯ãããŸãããããã³ããšã³ããããžã§ã¯ããä¿è·ããäžã§éèŠãªåŽé¢ã¯ãJavaScriptã®äŸåé¢ä¿ã管çããä¿è·ããããšã§ããããã§ãnpm audit
ãç»å ŽããNode Package Manager (npm) ãšã³ã·ã¹ãã å
ã§è匱æ§ã¹ãã£ã³ãšä¿®åŸ©ã®ããã®åŒ·åã§å©çšããããããŒã«ãæäŸããŸãããã®å
æ¬çãªã¬ã€ãã§ã¯ãnpm audit
ã®è€éããæãäžããå®å
šãªããã³ããšã³ãéçºã¯ãŒã¯ãããŒãç¶æããããã®ç¥èãšããŒã«ãç¿åŸããŠããã ããŸãã
äŸåé¢ä¿ã®ã»ãã¥ãªãã£ã®éèŠæ§ãçè§£ãã
倿°ã®ãµãŒãããŒãã£ã©ã€ãã©ãªãšããã±ãŒãžã«äŸåããããšãå€ãããã³ããšã³ããããžã§ã¯ãã¯ãæ¬è³ªçã«ã»ãã¥ãªãã£äžã®è åšã«å¯ŸããŠè匱ã§ãããããã®äŸåé¢ä¿ã«ã¯ãæªçšããããšã¢ããªã±ãŒã·ã§ã³ãšãŠãŒã¶ãŒããŒã¿ã䟵害ããå¯èœæ§ã®ããæ¢ç¥ã®è匱æ§ãå«ãŸããŠããå¯èœæ§ããããŸãããªã¹ã¯ã¯é倧ã§ãã¯ãã¹ãµã€ãã¹ã¯ãªããã£ã³ã° (XSS) æ»æãããªã¢ãŒãã³ãŒãå®è¡ (RCE)ãããŒã¿æŒæŽ©ãŸã§å€å²ã«ããããŸããäŸåé¢ä¿ã®ã»ãã¥ãªãã£ãç¡èŠãããšãééçæå€±ãè©å€ã®äœäžãæ³ç圱é¿ãªã©ãæ·±å»ãªçµæã«ã€ãªããå¯èœæ§ããããŸãã
ããã·ããªãªãèããŠã¿ãŸããããããªãã®ãããžã§ã¯ãã¯ãäžè¬çãªJavaScriptã©ã€ãã©ãªãçµã¿èŸŒãã§ããŸãããã®ã©ã€ãã©ãªã®ç¹å®ã®ããŒãžã§ã³ã«è匱æ§ãèŠã€ãããŸããããã®è匱æ§ãèªèããã«ãè匱ãªããŒãžã§ã³ã䜿çšãç¶ãããšãããªãã®ã¢ããªã±ãŒã·ã§ã³ã¯æ»æè ã«ãšã£ãŠå®¹æãªã¿ãŒã²ããã«ãªããŸããããã¯ã宿çãªã»ãã¥ãªãã£ç£æ»ãšç©æ¥µçãªäŸåé¢ä¿ç®¡çã®å®è·µãäžå¯æ¬ ã§ããããšãæµ®ã圫ãã«ããŠããŸãã
npm auditãšã¯ïŒ
npm audit
ã¯ããããžã§ã¯ãã®äŸåé¢ä¿ã«æ¢ç¥ã®ã»ãã¥ãªãã£è匱æ§ããªããã¹ãã£ã³ãããnpmã®çµã¿èŸŒã¿ã³ãã³ãã§ãã npm, Inc. (æ§Node.js Foundation) ã管çããæ¢ç¥ã®è匱æ§ã®ããŒã¿ããŒã¹ã掻çšããŠããŸããnpm audit
ãå®è¡ãããšãpackage.json
ãã¡ã€ã«ãš package-lock.json
ãã¡ã€ã« (ãŸã㯠npm-shrinkwrap.json
) ãåæããŠãæ¢ç¥ã®è匱æ§ãæã€ããã±ãŒãžãç¹å®ããŸãããã®åŸããããã®è匱æ§ã«é¢ãã詳现æ
å ± (é倧床ã¬ãã«ã圱é¿ãåããããŒãžã§ã³ãæšå¥šããã修埩æé ãªã©) ãæäŸããŸãã
npm audit
ã䜿çšããäž»ãªå©ç¹ã«ã¯ã以äžãå«ãŸããŸãã
- èªåèåŒ±æ§æ€åº: ãããžã§ã¯ãã®äŸåé¢ä¿ã«ãããã»ãã¥ãªãã£è匱æ§ãèªåçã«èå¥ããŸãã
- æç¢ºãªã¬ããŒã: é倧床ã¬ãã«ã圱é¿ãåããããã±ãŒãžãããã³æœåšçãªè§£æ±ºçãå«ã詳现ãªã¬ããŒããæäŸããŸãã
- 䜿ãããã: npmã«çŽæ¥çµ±åãããŠãããããéçºã¯ãŒã¯ãããŒã«ç°¡åã«çµã¿èŸŒãããšãã§ããŸãã
- å®çšçãªæšå¥šäºé : ç¹å®ãããè匱æ§ã«å¯ŸåŠããæ¹æ³ã«é¢ããå ·äœçãªã¬ã€ãã³ã¹ãæäŸããŸãã
- äŸåé¢ä¿ããªãŒåæ: ãããžã§ã¯ãã®äŸåé¢ä¿ (äŸåé¢ä¿ã®äŸåé¢ä¿) ãå«ãããããžã§ã¯ãå šäœã®äŸåé¢ä¿ããªãŒãã¹ãã£ã³ããŸãã
npm auditã®å®è¡: ã¹ããããã€ã¹ãããã¬ã€ã
npm audit
ã®å®è¡ã¯ç°¡åã§ããæ¬¡ã®ç°¡åãªæé ã«åŸã£ãŠãã ããã
- ãããžã§ã¯ããã£ã¬ã¯ããªã«ç§»åããŸã: ã¿ãŒããã«ãŸãã¯ã³ãã³ãããã³ãããéãã
package.json
ãã¡ã€ã«ãååšããããã³ããšã³ããããžã§ã¯ãã®ã«ãŒããã£ã¬ã¯ããªã«ç§»åããŸãã - ç£æ»ã³ãã³ããå®è¡ããŸã: 次ã®ã³ãã³ããå®è¡ããŸã:
npm audit
- åºåã確èªããŸã: npmã¯äŸåé¢ä¿ãåæããã¬ããŒããçæããŸããã¬ããŒãã«ã¯ãæ€åºãããè匱æ§ã®è©³çްããé倧床ã¬ãã« (ã¯ãªãã£ã«ã«ãé«ãäžãäœ) ãšãšãã«èšèŒãããŸãã
- è匱æ§ã«å¯ŸåŠããŸã: ã¬ããŒãã«åºã¥ããŠãç¹å®ãããè匱æ§ã«å¯ŸåŠããããã«å¿ èŠãªæé ãå®è¡ããŸããããã«ã¯ãè匱ãªããã±ãŒãžã®æŽæ°ãŸãã¯æšå¥šãããä¿®æ£ã®å®è£ ãå«ãŸããŸãã
ç°¡åãªäŸãèŠãŠã¿ãŸããããnpm audit
ãå®è¡ããŠã次ã®ãããªåºåã衚瀺ããããšããŸãã
# npm audit report
ansi-regex 1.2.1 - 5.0.1
Severity: moderate
Regular Expression Denial of Service
Fix:
Run npm audit fix --force
... (more information)
ãã®åºåã¯ãansi-regex
ããã±ãŒãžã«äžçšåºŠã®é倧床ã®è匱æ§ãããããšã瀺ããŠããŸããã¬ããŒãã§ã¯ãåé¡ãèªåçã«è§£æ±ºããããã« npm audit fix --force
ãå®è¡ããããšãæšå¥šããŠããŸãã
npm auditã¬ããŒãã®è§£é
npm audit
ã¬ããŒãã¯ãè匱æ§è©äŸ¡ããã»ã¹ã®æ žå¿ã§ããæäŸãããæ
å ±ãè§£éããæ¹æ³ãçè§£ããããšã¯ã广çãªä¿®åŸ©ã«ãšã£ãŠäžå¯æ¬ ã§ããã¬ããŒãã«ã¯éåžžãæ¬¡ã®äž»èŠã»ã¯ã·ã§ã³ãå«ãŸããŸãã
- è匱æ§ã®æŠèŠ: é倧床 (ã¯ãªãã£ã«ã«ãé«ãäžãäœ) å¥ã«åé¡ããããæ€åºãããè匱æ§ã®æŠèŠãããã«ããããããžã§ã¯ãã®ã»ãã¥ãªãã£äœå¶ããã°ããææ¡ã§ããŸãã
- è匱æ§ã®è©³çް: ç¹å®ãããåè匱æ§ã«ã€ããŠãã¬ããŒãã«ã¯æ¬¡ã®æ å ±ãèšèŒãããŠããŸãã
- ããã±ãŒãžå: è匱ãªããã±ãŒãžã®ååã
- 圱é¿ãåããããŒãžã§ã³: è匱æ§ã®åœ±é¿ãåããããã±ãŒãžã®ç¹å®ã®ããŒãžã§ã³ã
- é倧床: è匱æ§ã®é倧床ã¬ãã« (ã¯ãªãã£ã«ã«ãé«ãäžãäœ)ã
- 説æ: è匱æ§ãšããã®æœåšçãªåœ±é¿ã«ã€ããŠã®ç°¡åãªèª¬æã
- æšå¥šäºé : è匱æ§ã修埩ããããã®æšå¥šæé ãããã«ã¯ããããé©çšæžã¿ã®ããŒãžã§ã³ãžã®ããã±ãŒãžã®æŽæ°ãåé¿çã®é©çšããŸãã¯ããã±ãŒãžã®å®å šãªåé€ãå«ãŸããå ŽåããããŸãã
- ãã¹: è匱ãªããã±ãŒãžããããžã§ã¯ãã®äŸåé¢ä¿ããªãŒã«ã©ã®ããã«å«ãŸããŠãããã瀺ãäŸåé¢ä¿ãã¹ããã®æ å ±ã¯ãè匱æ§ã®æ ¹æ¬åå ãçè§£ããã®ã«åœ¹ç«ã¡ãŸãã
- ã¡ã¿ããŒã¿ (ãªãã·ã§ã³): äžéšã®ã¬ããŒãã§ã¯ãè匱æ§ã®è©³çްãªèª¬æãžã®ãªã³ã¯ã§ããè匱æ§ã®CVE (Common Vulnerabilities and Exposures) IDãªã©ãè¿œå æ å ±ãæäŸãããå ŽåããããŸãã
é倧床ã¬ãã«ã¯æ¬¡ã®ããã«åé¡ãããŠããŸãã
- ã¯ãªãã£ã«ã«: ãªã¹ã¯ãæãé«ããçŽã¡ã«å¯ŸåŠããå¿ èŠããããŸãããããã®è匱æ§ã¯ãå€ãã®å Žåãã·ã¹ãã ã®å®å šãªäŸµå®³ã«ã€ãªããå¯èœæ§ããããŸãã
- é«: æ»æè ãå¶åŸ¡ãååŸããããæ©å¯ããŒã¿ã«ã¢ã¯ã»ã¹ãããããå¯èœæ§ããããé倧ãªãªã¹ã¯ã衚ããŸãã
- äž: 察åŠããå¿ èŠãããäžçšåºŠã®ã¬ãã«ã®ãªã¹ã¯ã瀺ããŸããã圱é¿ã¯ããã»ã©æ·±å»ã§ã¯ãªãå¯èœæ§ããããŸãã
- äœ: æ å ±é瀺ã®å¯èœæ§ããæ©èœãžã®è»œåŸ®ãªåœ±é¿ãªã©ããªã¹ã¯ãäœãããšã衚ããŸãã
è匱æ§ã®ä¿®åŸ©
npm audit
ã¬ããŒããåæããããç¹å®ãããè匱æ§ã«å¯ŸåŠããããã®æªçœ®ãè¬ããå¿
èŠããããŸããnpmã¯ã修埩ã®ããã®ããã€ãã®ãªãã·ã§ã³ãæäŸããŠããŸãã
- npm audit fix: ãã®ã³ãã³ãã¯ãè匱ãªããã±ãŒãžããããé©çšæžã¿ã®ããŒãžã§ã³ã«æŽæ°ããããšã«ãããè匱æ§ãèªåçã«ä¿®æ£ããããšããŸããããã¯ãæãç°¡åã§ãå€ãã®å Žåãæã广çãªã¢ãããŒãã§ããæ¬¡ã®ã³ãã³ãã§å®è¡ããŸã:
npm audit fix
ãã ãã
npm audit fix
ã¯ãç¹ã«æŽæ°ãäžæãããŠããå ŽåããããŒãžã§ã³ã®ç«¶åãããå Žåãªã©ããã¹ãŠã®è匱æ§ãåžžã«è§£æ±ºã§ãããšã¯éããŸããããŸããäŸåé¢ä¿ãç²ç®çã«æŽæ°ããããšã«ã¯æ³šæããŠãã ãããäºæããªãåäœãå°å ¥ãããå¯èœæ§ããããŸãã - npm audit fix --force: å Žåã«ãã£ãŠã¯ã
npm audit fix
ãããŒãžã§ã³ã®ç«¶åããã®ä»ã®å¶çŽã«ãããè匱æ§ãèªåçã«ä¿®æ£ã§ããªãå ŽåããããŸãã--force
ãã©ã°ã¯ãè匱æ§ã解決ããããã«ãæœåšçã«äžæãã倿Žã npm ã«åŒ·å¶çã«è¡ããŸãããã®ãªãã·ã§ã³ã¯æ³šæããŠäœ¿çšããŠãã ãããä¿®æ£åŸã«æåã§ã®ãã¹ããšã³ãŒã調æŽãå¿ èŠã«ãªãå ŽåããããŸããnpm audit fix --force
- æåæŽæ°:
npm audit fix
ãŸãã¯npm audit fix --force
ãè匱æ§ã®è§£æ±ºã«å€±æããå Žåã¯ãè匱ãªããã±ãŒãžãæåã§æŽæ°ããå¿ èŠããããŸããæšå¥šããŒãžã§ã³ã«ã€ããŠã¯npm audit
ã¬ããŒããåç §ããããã¢ããã°ã¬ãŒãæé ã«ã€ããŠã¯ããã±ãŒãžã®ããã¥ã¡ã³ãã確èªããŠãã ãããæ¬¡ã®ã³ãã³ãã䜿çšããŠããã±ãŒãžãæŽæ°ã§ããŸã:npm update <package-name>
- 代æ¿ããã±ãŒãž: ããã±ãŒãžã®æŽæ°ãå®çŸäžå¯èœã§ããããäºææ§ã®åé¡ãå€ãããå Žåã¯ãåæ§ã®æ©èœãæäŸããŸãããè匱æ§ã®åœ±é¿ãåããªã代æ¿ããã±ãŒãžã®äœ¿çšãæ€èšããŠãã ãããåãæ¿ããåã«ã代æ¿ããã±ãŒãžãååã«è©äŸ¡ããŠãã ããã
- åé¿ç: å Žåã«ãã£ãŠã¯ãçŽæ¥ã¢ããã°ã¬ãŒãã§ããªãå¯èœæ§ããããåé¿çãå®è£
ã§ããŸãã
npm audit
ã¬ããŒãã«ã¯ãåé¿çãèšèŒãããŠããå ŽåããããŸããããã«ã¯ãç¹å®ã®æ§æã®èšå®ããç¹å®ã®ã³ãŒããã¹ã®åé¿ãå«ãŸããå ŽåããããŸããåé¿çã¯å¿ ãååã«ææžåããŠãã ããã - ããã±ãŒãžã®åé€: ãŸãã«ãè匱ãªããã±ãŒãžããããžã§ã¯ãã«äžå¯æ¬ ã§ãªãå Žåã¯ãåé€ããããšãæ€èšããŠãã ãããããã±ãŒãžãåé€ããŠããã¢ããªã±ãŒã·ã§ã³ã®æ©èœã«åœ±é¿ããªãããšã確èªããŠãã ããã
æåæŽæ°ã®äŸ:
npm audit
ã¬ããŒãããlodash
ãšããããã±ãŒãžãããŒãžã§ã³ 4.17.21 以éã«æŽæ°ããããšãæšå¥šããŠãããšããŸããæ¬¡ã®ã³ãã³ããå®è¡ããŸã:
npm update lodash
lodash
ãããããžã§ã¯ãã® package.json
ã§å®çŸ©ãããŠããèŠä»¶ãŸãã¯æšå¥šããŒãžã§ã³ãæºããææ°ããŒãžã§ã³ã«æŽæ°ãããŸãã
äŸåé¢ä¿ã®ã»ãã¥ãªãã£ã«é¢ãããã¹ããã©ã¯ãã£ã¹
npm audit
ãå®è£
ããããšã¯ãããã³ããšã³ãã®äŸåé¢ä¿ã®ã»ãã¥ãªãã£ã«é¢ããŠã¯ãã»ãã®å°ããªäžæã§ããå
ç¢ãªã»ãã¥ãªãã£äœå¶ã確ä¿ããããã«æ¡çšãã¹ããã¹ããã©ã¯ãã£ã¹ã以äžã«ç€ºããŸãã
- 宿çãªç£æ»:
npm audit
ãé »ç¹ã«ãçæ³çã«ã¯ç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³/ç¶ç¶çããã〠(CI/CD) ãã€ãã©ã€ã³ã®äžéšãšããŠå®è¡ããŸããèªååãããç£æ»ã«ãããéçºãµã€ã¯ã«ã®æ©ã段éã§è匱æ§ãæ€åºã§ããŸãã - äŸåé¢ä¿ãææ°ã®ç¶æ ã«ä¿ã€: äŸåé¢ä¿ã宿çã«ææ°ã®å®å®ããŒãžã§ã³ã«æŽæ°ããŸããããã«ãããææ°ã®ã»ãã¥ãªãã£ããããšãã°ä¿®æ£ã確å®ã«é©çšãããŸãããããžã§ã¯ãã®ããŒãºã«å¿ããŠãæããšãŸãã¯éé±ãªã©ãäŸåé¢ä¿ã®æŽæ°ãã¹ã±ãžã¥ãŒã«ããŸãã
- ããã±ãŒãžããã¯ãã¡ã€ã«ã䜿çšãã: åžžã«
package-lock.json
(ãŸãã¯npm-shrinkwrap.json
) ãã¡ã€ã«ãããŒãžã§ã³ç®¡çã·ã¹ãã ã«ã³ãããããŸãããã®ãã¡ã€ã«ã¯ãäŸåé¢ä¿ã®æ£ç¢ºãªããŒãžã§ã³ãããã¯ãããããããŒã ã®å šå¡ãåãããŒãžã§ã³ã䜿çšãããã«ãã«äžè²«æ§ãããããšãä¿èšŒããŸãã - äŸåé¢ä¿ã©ã€ã»ã³ã¹ã確èªãã: 䜿çšããããã±ãŒãžã®ã©ã€ã»ã³ã¹ãèªèããŠãã ãããäžéšã®ã©ã€ã»ã³ã¹ã«ã¯ãåçšå©çšã®å¶éãåž°å±ã®èŠä»¶ãããå ŽåããããŸããããŒã«ãŸãã¯æåãã§ãã¯ã䜿çšããŠããããžã§ã¯ãå ã®ãã¹ãŠã®ã©ã€ã»ã³ã¹ã確èªãããããžã§ã¯ãã®ã©ã€ã»ã³ã¹èŠä»¶ã«æ²¿ã£ãã©ã€ã»ã³ã¹ãæã€ããã±ãŒãžãéžæããŸãã
- äŸåé¢ä¿ãæå°éã«æãã: ãããžã§ã¯ãã«äžèŠãªäŸåé¢ä¿ãå«ããªãããã«ããŸããå°å ¥ããäŸåé¢ä¿ãå¢ããã»ã©ãæ»æå¯Ÿè±¡é åã倧ãããªããŸããåããã±ãŒãžã®å¿ èŠæ§ãæ³šææ·±ãè©äŸ¡ããŸãããã€ãã£ãJavaScriptãŸãã¯ã»ãã¥ãªãã£å®çžŸãããåªããŠããä»ã®ã©ã€ãã©ãªã§æ©èœãå©çšå¯èœãªå Žåã¯ãä»£æ¿ææ®µãæ€èšããŠãã ããã
- å®å šãªéçºãã©ã¯ãã£ã¹: ãããžã§ã¯ãã§å®å šãªã³ãŒãã£ã³ã°ãã©ã¯ãã£ã¹ãå®è£ ããŸããããã«ã¯ããŠãŒã¶ãŒå ¥åããµãã¿ã€ãºããããŒã¿ãæ€èšŒããåºåããšã¹ã±ãŒãããŠãXSSãSQLã€ã³ãžã§ã¯ã·ã§ã³ãªã©ã®è匱æ§ã鲿¢ããããšãå«ãŸããŸãã
- éçã³ãŒãåæ: éçã³ãŒãåæããŒã« (ãªã³ã¿ãŒãšã»ãã¥ãªãã£ã¹ãã£ããŒ) ã䜿çšããŠãã³ãŒãããŒã¹ã®æœåšçãªã»ãã¥ãªãã£äžã®æ¬ é¥ãç¹å®ããŸãããããã®ããŒã«ã¯ã
npm audit
ã§ã¯æ€åºã§ããªãèåŒ±æ§ (å®å šã§ãªãã³ãŒãã£ã³ã°ãã¿ãŒã³ãããŒãã³ãŒããããç§å¯ãªã©) ããã£ããã§ããŸãã - ãµãã©ã€ãã§ãŒã³ã®ã»ãã¥ãªãã£: ãœãããŠã§ã¢ãµãã©ã€ãã§ãŒã³ã«æ³šæããŠãã ãããããã±ãŒãžãœãŒã¹ãæ€èšŒããä¿¡é Œã§ããªããªããžããªããããã±ãŒãžãã€ã³ã¹ããŒã«ããªãããã«ããŸããå¯èœã§ããã°ãã³ãŒããäŸåé¢ä¿ãã³ãã¥ããã£æŽ»åã確èªããŠãæ°ããããã±ãŒãžã審æ»ããŸããã»ãã¥ãªãã£æ©èœãåããããã±ãŒãžã¬ãžã¹ããªã®äœ¿çšãæ€èšããŠãã ããã
- ç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³/ç¶ç¶çããã〠(CI/CD):
npm audit
ã CI/CD ãã€ãã©ã€ã³ã«çµ±åããŠãè匱æ§ã¹ãã£ã³ãšä¿®åŸ©ãèªååããŸããé倧床ãŸãã¯é«é倧床ã®è匱æ§ãæ€åºãããå Žåã«ããã«ãã倱æããããã«ãã€ãã©ã€ã³ãæ§æããŸãã - ã»ãã¥ãªãã£ãã¬ãŒãã³ã°: å®å šãªã³ãŒãã£ã³ã°ãã©ã¯ãã£ã¹ãšäŸåé¢ä¿ç®¡çã«ã€ããŠãéçºããŒã ããã¬ãŒãã³ã°ããŸããææ°ã®ã»ãã¥ãªãã£è åšãšãã¹ããã©ã¯ãã£ã¹ã«ã€ããŠãããŒã ãæè²ããŸãã
- æ¢ç¥ã®ãšã¯ã¹ããã€ããç£èŠãã: 䜿çšããŠããã©ã€ãã©ãªã«ã€ããŠãæ°ããçºèŠãããè匱æ§ãšæ¢ç¥ã®ãšã¯ã¹ããã€ãã«é¢ããæ å ±ãå ¥æããŠãã ãããã»ãã¥ãªãã£ã¢ããã€ã¶ãªãšãã¥ãŒã¹ã¬ã¿ãŒã賌èªããŸãã
- å æ¬çãªåæã«ã¯ã»ãã¥ãªãã£ã¹ãã£ããŒã䜿çšãã: å°çšã®ã»ãã¥ãªãã£ã¹ãã£ããŒãã¯ãŒã¯ãããŒã«çµ±åããŸãããããã®ããŒã«ã¯ãæ§æãã³ãŒãã£ã³ã°ãã©ã¯ãã£ã¹ã«é¢é£ãããã®ãªã©ãæœåšçãªè匱æ§ã«é¢ããè©³çŽ°ãªæŽå¯ãæäŸããŸãããŸããèªååãããèåŒ±æ§æ€åºãšä¿®åŸ©ã®ããã®çµ±åãæäŸããå ŽåããããŸãã
- äŸåé¢ä¿ãåé¢ãã: ã³ã³ãããŒåãŸãã¯ä»®æ³ç°å¢ã䜿çšããŠããããžã§ã¯ãã®äŸåé¢ä¿ãåé¢ããããšãæ€èšããŠãã ãããããã«ãããäŸåé¢ä¿ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãŸãã¯ã¢ããªã±ãŒã·ã§ã³ã®ä»ã®éšåã劚ããã®ãé²ãããšãã§ããŸãã
- ãããã¬ãŒã·ã§ã³ãã¹ããå®è¡ãã: 宿çãªãããã¬ãŒã·ã§ã³ãã¹ãã宿œããŠãã»ãã¥ãªãã£è匱æ§ãç¹å®ãã察åŠããŸãããããã¬ãŒã·ã§ã³ãã¹ãã«ã¯ãå®éã®æ»æãã·ãã¥ã¬ãŒãããŠãã·ã¹ãã ã®åŒ±ç¹ãç¹å®ããããšãå«ãŸããŸãã
äŸ: npm auditãCI/CDã«çµ±åãã
npm audit
ã CI/CD ãã€ãã©ã€ã³ã«çµ±åãããšãã»ãã¥ãªãã£ã¹ãã£ã³ããã»ã¹ãèªååã§ããŸããäžè¬çãªCI/CDãã©ãããã©ãŒã ã䜿çšããç°¡åãªäŸã次ã«ç€ºããŸãã
- CI/CDãã©ãããã©ãŒã ãéžæãã: JenkinsãGitLab CIãGitHub ActionsãCircleCIãAzure DevOpsãªã©ã®CI/CDãã©ãããã©ãŒã ãéžæããŸãã
- ãã«ããã€ãã©ã€ã³ãäœæãã: æ¬¡ã®æé ãå®è¡ãããã€ãã©ã€ã³ãå®çŸ©ããŸãã
- ã³ãŒãããã§ãã¯ã¢ãŠããã: ãããžã§ã¯ãã®ãœãŒã¹ã³ãŒããããŒãžã§ã³ç®¡çã·ã¹ãã (Gitãªã©) ããååŸããŸãã
- äŸåé¢ä¿ãã€ã³ã¹ããŒã«ãã:
npm install
ãå®è¡ããŠããã¹ãŠã®ãããžã§ã¯ãäŸåé¢ä¿ãã€ã³ã¹ããŒã«ããŸãã npm audit
ãå®è¡ãã:npm audit
ã³ãã³ããå®è¡ãããã®åºåãåæããŸãã- æ¡ä»¶ä»ããšã©ãŒãå®è£
ãã:
npm audit
ã¬ããŒãã§é倧床ãŸãã¯é«é倧床ã®è匱æ§ãæ€åºãããå Žåããã«ãã倱æããããã«ãã€ãã©ã€ã³ãæ§æããŸããããã¯ãå€ãã®å Žåãnpm audit
ã®åºåãè§£æããç¹å®ã®é倧床ã®è匱æ§ã確èªããããšã§è¡ãããŸãã - çµæãå ±åãã: ã¬ãã¥ãŒã®ããã«
npm audit
ã¬ããŒããå ¬éããŸãã - GitHub Actionsã¯ãŒã¯ãããŒã®äŸ (
.github/workflows/audit.yml
):name: npm audit on: push: branches: [ "main" ] pull_request: branches: [ "main" ] jobs: audit: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Setup Node.js uses: actions/setup-node@v3 with: node-version: 16 - name: Install Dependencies run: npm install - name: Run npm audit id: audit run: | npm audit --json | jq -r '.vulnerabilities | to_entries | map(select(.value.severity == "critical" or .value.severity == "high")) | length' # Parse the audit report npm audit --json > audit-results.json if [ $(jq '.vulnerabilities | to_entries | map(select(.value.severity == "critical" or .value.severity == "high")) | length' audit-results.json) -gt 0 ]; then echo "::error title=npm audit failed::High or critical vulnerabilities found. Please address them." exit 1 fi - name: Report results if: steps.audit.outcome == 'failure' run: | cat audit-results.json
ãã®äŸã¯ãGitHub Actionsã䜿çšããåºæ¬çãªã¯ãŒã¯ãããŒã瀺ããŠããŸããç¹å®ã®CI/CDãã©ãããã©ãŒã ãšãã®æ§æã«åãããŠããã®äŸã調æŽããå¿ èŠããããŸãã
é«åºŠãªnpm auditã®äœ¿çšæ³
npm audit
ã¯ãè匱æ§ã¹ãã£ã³ã®åŒ·åºãªåºç€ãæäŸããŸãããã»ãã¥ãªãã£äœå¶ãããã«åŒ·åããããã®ããã€ãã®é«åºŠãªæ©èœãæäŸããŠããŸãã
- npm audit --json: ãã®ãªãã·ã§ã³ã¯ã
npm audit
ã®åºåãJSON圢åŒã§ãã©ãŒãããããèªååãããã¯ãŒã¯ãããŒãžã®è§£æãšçµ±åã容æã«ããŸããããã¯ãnpm audit
ã CI/CD ãã€ãã©ã€ã³ã«çµã¿èŸŒãå Žåã«ç¹ã«åœ¹ç«ã¡ãŸãã - npm audit ci: CIç°å¢ã§äœ¿çšããããšãç®çãšããŠãããè匱æ§ãæ€åºãããå Žåã0以å€ã®ã³ãŒãã§çµäºããCIãã€ãã©ã€ã³ã§ãšã©ãŒãããªã¬ãŒããŸããããã«ãããã»ãã¥ãªãã£ã®åé¡ãæ€åºãããå Žåã«ããã«ããèªåçã«å€±æãããããšãã§ããŸãã
- è匱æ§ã®ç¡èŠ: ç¹å®ã®å Žåãç¹å®ã®è匱æ§ãç¡èŠããå¿
èŠãããå ŽåããããŸããããã¯ã
npm audit fix --force
ã³ãã³ãã䜿çšããŠæ³šæããŠå®è¡ã§ããŸãããã ããè匱æ§ãç¡èŠããããšã®åœ±é¿ãèæ ®ãããããå®å šã«ææžåãããŠããããšã確èªããŠãã ãããäžè¬çã«ã¯ãè匱æ§ã«ç©æ¥µçã«å¯ŸåŠããããšããå§ãããŸãã - ã«ã¹ã¿ã ç£æ»æ§æ: npm ã¯ç£æ»èšå®ã®çŽæ¥çãªæ§æãã¡ã€ã«ãæäŸããŠããŸããããã«ã¹ã¿ã ã¹ã¯ãªãããŸãã¯ããŒã«ã CI/CD ãã€ãã©ã€ã³ã«çµ±åããŠãç£æ»ããã»ã¹ãç¹å®ã®ããŒãºã«åãããŠããã«èª¿æŽã§ããŸãã
çµè«
ããã³ããšã³ãJavaScriptã®äŸåé¢ä¿ãä¿è·ããããšã¯ãå®å
šãªWebã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®äžå¯æ¬ ãªæé ã§ããnpm audit
ã¯ããããžã§ã¯ããèªåçã«ã¹ãã£ã³ããŠè匱æ§ãç¹å®ãã修埩ã«å°ãããã®è²ŽéãªããŒã«ãæäŸããŸãããã®ã¬ã€ãã§æŠèª¬ãããŠãããã¹ããã©ã¯ãã£ã¹ã«åŸããnpm audit
ãéçºã¯ãŒã¯ãããŒã«çµ±åããããšã«ãããããã³ããšã³ããããžã§ã¯ãã®ã»ãã¥ãªãã£ã倧å¹
ã«åäžãããããšãã§ããŸããã»ãã¥ãªãã£ã¯é²è¡äžã®ããã»ã¹ã§ãããç¶ç¶çãªèŠæãšç©æ¥µçãªå¯Ÿçããã¢ããªã±ãŒã·ã§ã³ãä¿è·ãããŠãŒã¶ãŒãä¿è·ããããã®éµã§ããããšãå¿ããªãã§ãã ããã
ãã®ã¬ã€ãã§æäŸãããŠããæ å ±ã¯ãå®å šãªããã³ããšã³ãéçºã®ããã®åºç€çãªãã¬ãŒã ã¯ãŒã¯ãšããŠåœ¹ç«ã¡ãŸãããœãããŠã§ã¢ã®ç¶æ³ãšè åšã®ç¶æ³ã¯åžžã«é²åããŠããŸããã»ãã¥ãªãã£ã®ãã¹ããã©ã¯ãã£ã¹ã宿çã«èŠçŽããææ°ã®è匱æ§ã«é¢ããæ å ±ãå ¥æããããã«å¿ããŠã»ãã¥ãªãã£å¯Ÿçã調æŽããŠãå®å šã§ä¿¡é Œæ§ã®é«ãããã³ããšã³ãã¢ããªã±ãŒã·ã§ã³ãç¶æããŠãã ããã