ãŠã§ãã¢ããªã®ã»ãã·ã§ã³ç®¡çïŒã¯ãã㌠vs JWT vs ãªãã¬ãã·ã¥
ãŠã§ãã¢ããªã®ã»ãã·ã§ã³ç®¡çãæ¯èŒïŒã¯ãããŒããŒã¹ã®ã»ãã·ã§ã³ãJWTããªãã¬ãã·ã¥ããŒã¯ã³ãè åšã¢ãã«ãšçŸå®çãªãã°ã¢ãŠãèŠä»¶ã§èå¯ããŸãã

ã»ãã·ã§ã³ç®¡çãæ¬åœã«ãã£ãŠããããš
ã»ãã·ã§ã³ãšã¯ã誰ãããã°ã€ã³ããåŸã«ã¢ããªãçããäžã€ã®è³ªåã§ãïŒ ãããªãã¯ä»èª°ã§ããïŒã ä¿¡é Œã§ããçããåŸãããã°ãã¢ããªã¯ãã®ãŠãŒã¶ãŒãäœãèŠãããããäœã倿Žã§ããããã©ã®æäœããããã¯ãããã倿ã§ããŸãã
ããã°ã€ã³ç¶æ ãç¶æãããããšãã»ãã¥ãªãã£äžã®éžæã§ããã©ããããã®æéãŠãŒã¶ãŒã®è奿 å ±ãæå¹ã«ããããèå¥ã®èšŒæãã©ãã«çœ®ããããããã®èšŒæãã³ããŒããããã©ãããããæ±ºããŠããŸãã
ã»ãšãã©ã®ãŠã§ãã¢ããªæ§æã¯æ¬¡ã®äžã€ã®èŠçŽ ã«äŸåããŸãïŒ
- Cookie-based server sessionsïŒãã©ãŠã¶ã¯ã¯ãããŒã«å€ãä¿æãããµãŒããŒãåãªã¯ãšã¹ãã§ã»ãã·ã§ã³ãåç §ããŸãã
- JWT access tokensïŒã¯ã©ã€ã¢ã³ããçœ²åæžã¿ããŒã¯ã³ãéãããµãŒããŒã¯ããŒã¿ããŒã¹åç §ãªãã§æ€èšŒã§ããŸãã
- Refresh tokensïŒããé·æéæå¹ãªè³æ Œæ å ±ã§ãæ°ããçåœã®ã¢ã¯ã»ã¹ããŒã¯ã³ãååŸããããã«äœ¿ããŸãã
ãããã¯ç«¶åãããã¹ã¿ã€ã«ãã§ã¯ãªããåããã¬ãŒããªããæ±ãå¥ã®æ¹æ³ã§ãïŒé床ãšå¶åŸ¡ãåçŽããšæè»æ§ããããŠãä»ããç¡å¹åã§ãããïŒããšãèªç¶ã«æéåãã«ãªããïŒãã®éãã§ãã
è©äŸ¡ã«åœ¹ç«ã€åãã¯ããã§ãïŒæ»æè ãã¢ããªã®èšŒæïŒã¯ãããŒãããŒã¯ã³ïŒãçãã å Žåãäœãã§ããŠã©ããããç¶ããïŒ åŒ·ããµãŒããŒåŽã®å¶åŸ¡ãå¿ èŠãªå ŽåïŒåŒ·å¶ãã°ã¢ãŠãã峿ããã¯ã¢ãŠããªã©ïŒãã¯ãããŒã»ãã·ã§ã³ã¯æå©ã§ããJWTã¯ãã«ããµãŒãã¹ã§ã®ã¹ããŒãã¬ã¹ãªæ€èšŒã«åããŸããã峿åãæ¶ããå¿ èŠã ãšåä»ã«ãªããŸãã
ã©ããäžã€ããã¹ãŠã«åã€ããã§ã¯ãããŸãããæ£ããã¢ãããŒãã¯ããªãã®è åšã¢ãã«ããã°ã¢ãŠãèŠä»¶ã®å³ãããããŒã ãçŸå®çã«ç¶æã§ããè€éãã«ãã£ãŠæ±ºãŸããŸãã
æ£ããçããå€ããè åšã¢ãã«
è¯ãã»ãã·ã§ã³èšèšã¯ãæè¯ã®ãããŒã¯ã³ã¿ã€ãããããã©ã®æ»æã«èããå¿ èŠããããã«äŸåããŸãã
æ»æè ããã©ãŠã¶ã¹ãã¬ãŒãžïŒlocalStorageãªã©ïŒããããŒã¿ãçãå ŽåãJWTã¢ã¯ã»ã¹ããŒã¯ã³ã¯ããŒãžã®JavaScriptããèªã¿åããããç°¡åã«å¥ªãããŸããçãŸããã¯ãããŒã¯ç¶æ³ãç°ãªããŸãïŒHttpOnly ã«èšå®ãããŠããã°éåžžã®ããŒãžã³ãŒãã¯èªããªããããåçŽãªãããŒã¯ã³æšªåããæ»æã¯é£ãããªããŸããããããããã€ã¹èªäœïŒçŽå€±ããã©ãããããããã«ãŠã§ã¢ãå ±æã³ã³ãã¥ãŒã¿ïŒãæ»æè ãæã£ãŠããå Žåããã©ãŠã¶ãããã¡ã€ã«ããã¯ãããŒãã³ããŒãããå¯èœæ§ã¯æ®ããŸãã
XSSïŒæ»æè ã³ãŒããããªãã®ããŒãžäžã§å®è¡ãããïŒã¯å šãŠãå€ããŸããXSSãããã°ãæ»æè ã¯ç§å¯ãçãŸãªããŠã被害è ã®æ¢åãã°ã€ã³ã»ãã·ã§ã³ã䜿ã£ãŠæäœã§ããŸããHttpOnlyã¯ãããŒã¯ã»ãã·ã§ã³ç§å¯ã®èªã¿åããé²ããŸãããããŒãžãããªã¯ãšã¹ããéãããšèªäœã¯æ¢ããããŸããã
CSRFïŒå¥ãµã€ãããã®æãŸãããªãæäœã®åŒãèµ·ããïŒã¯äž»ã«ã¯ãããŒããŒã¹ã®ã»ãã·ã§ã³ãè
ãããŸãããã©ãŠã¶ãèªåçã«ã¯ãããŒãä»äžããããã§ããã¯ãããŒã«é Œãå Žåã¯æç¢ºãªCSRFé²åŸ¡ãå¿
èŠã§ãïŒæå³ããSameSiteèšå®ãã¢ã³ãCSRFããŒã¯ã³ãç¶æ
倿Žãªã¯ãšã¹ãã®æ
éãªæ±ããªã©ãAuthorizationãããã§éãããJWTã¯å€å
žçãªCSRFã«ã¯æããã«ããã§ãããJavaScriptã§èªã¿åããå Žæã«ä¿åããŠãããšXSSã«ã¯è匱ã§ãã
ãªãã¬ã€æ»æïŒçãŸããè³æ Œæ å ±ã®åå©çšïŒã¯ããµãŒããŒåŽã»ãã·ã§ã³ãåŸæãªåéã§ãïŒã»ãã·ã§ã³IDãå³åº§ã«ç¡å¹åã§ããŸããçåœã®JWTã¯ãªãã¬ã€æéãçãããŸãããããŒã¯ã³ãæå¹ã§ããéã¯ãªãã¬ã€ãé²ããŸããã
å ±æããã€ã¹ãçŽå€±ããé»è©±ã¯ããµã€ã³ã¢ãŠãããçŸå®çãªè åšã¢ãã«ã«ããŸããæ±ºå®ã¯é垞次ã®ãããªåãã«èœã¡çããŸãïŒãŠãŒã¶ãŒã¯ä»ã®ããã€ã¹ãã匷å¶ãã°ã¢ãŠãã§ããããã©ããããéããããæå¹ã«ãªããããªãã¬ãã·ã¥ããŒã¯ã³ãçãŸãããã©ãããããããã°ã€ã³ãèšæ¶ããïŒremember meïŒããèš±ãããå€ãã®ããŒã ã¯ã¹ã¿ããã®ã¢ã¯ã»ã¹ã«å¯ŸããŠé¡§å®¢ããå³ããåºæºãèšããã¿ã€ã ã¢ãŠããåãæ¶ãæåŸ ãå€ããŸãã
ã¯ãããŒã»ãã·ã§ã³ïŒä»çµã¿ãšå®ããã®
ã¯ãããŒããŒã¹ã®ã»ãã·ã§ã³ã¯å€å žçãªæ§æã§ãããµã€ã³ã€ã³åŸããµãŒããŒã¯ã»ãã·ã§ã³ã¬ã³ãŒãïŒéåžžã¯IDãšãŠãŒã¶ãŒIDãäœææéãæå¹æéãªã©ã®ãã£ãŒã«ãïŒãäœããŸãããã©ãŠã¶ã¯ã»ãã·ã§ã³IDã ããã¯ãããŒã«ä¿åããåãªã¯ãšã¹ãã§ãã®ã¯ãããŒãè¿ããŸãããµãŒããŒã¯ã»ãã·ã§ã³ãèŠãŠãŠãŒã¶ãŒã倿ããŸãã
倧ããªã»ãã¥ãªãã£äžã®å©ç¹ã¯å¶åŸ¡åã§ããã»ãã·ã§ã³ã¯ãã®éœåºŠãµãŒããŒã§æ€èšŒãããŸãã誰ããããã¯ã¢ãŠãããå¿ èŠããããªãããµãŒããŒåŽã®ã»ãã·ã§ã³ã¬ã³ãŒããåé€ãŸãã¯ç¡å¹åããã°ãããã§çŽã¡ã«å¹åã倱ããŸãããŠãŒã¶ãŒãã¯ãããŒãæã¡ç¶ããŠããŠããµãŒããŒãæåŠããŸãã
å€ãã®ä¿è·ã¯ã¯ãããŒèšå®ããæ¥ãŸãïŒ
- HttpOnlyïŒJavaScriptããã¯ãããŒãèªã¿åããªãããã«ããŸãã
- SecureïŒHTTPSã§ã®ã¿ã¯ãããŒãéä¿¡ããŸãã
- SameSiteïŒã¯ãã¹ãµã€ãã®ãªã¯ãšã¹ãã§ã¯ãããŒãéä¿¡ãããã¿ã€ãã³ã°ãå¶éããŸãã
ã»ãã·ã§ã³ç¶æ ã®ä¿ç®¡å Žæã¯ã¹ã±ãŒãªã³ã°ã«åœ±é¿ããŸããã¢ããªã®ã¡ã¢ãªã«ä¿æããã®ã¯ç°¡åã§ãããè€æ°ãµãŒããŒãèµ°ããããšããé »ç¹ã«åèµ·åããç°å¢ã§ã¯ç Žç¶»ããŸããèä¹ æ§ãæ±ãããªãããŒã¿ããŒã¹ãé©ããŸããRedisã¯é«éãªã«ãã¯ã¢ãããšå€ãã®ã¢ã¯ãã£ãã»ãã·ã§ã³ãæ±ãå Žåã«äžè¬çã§ããéèŠãªç¹ã¯åãïŒãµãŒããŒã¯åãªã¯ãšã¹ãã§ã»ãã·ã§ã³ãèŠã€ããŠæ€èšŒã§ããªããã°ãªããªãããšããããšã§ãã
ã¯ãããŒã»ãã·ã§ã³ã¯ãã¹ã¿ããçšããã·ã¥ããŒãã管çè ã圹å²å€æŽåŸã«åŒ·å¶ãã°ã¢ãŠãã§ãããããªå Žé¢ã§åŒ·åã«é©åããŸããåŸæ¥å¡ãéè·ããå ŽåããµãŒããŒåŽã®ã»ãã·ã§ã³ãç¡å¹ã«ããã°ããŒã¯ã³ã®æå¹æéãåŸ ããã«ã¢ã¯ã»ã¹ãæ¢ããããŸãã
JWTã¢ã¯ã»ã¹ããŒã¯ã³ïŒåŒ·ã¿ãšæ³šæç¹
JWTïŒJSON Web TokenïŒã¯ãŠãŒã¶ãŒã«é¢ããããã€ãã®ã¯ã¬ãŒã ïŒãŠãŒã¶ãŒIDãããŒã«ãããã³ãïŒãšæå¹æéæ å ±ãæã€çœ²åä»ãæååã§ããAPIã¯çœ²åãšæå¹æéãããŒã«ã«ã§æ€èšŒããããŒã¿ããŒã¹ãåŒã¶ããšãªããªã¯ãšã¹ããèªå¯ããŸãã
ãã®ããJWTã¯APIãã¡ãŒã¹ãã®ãããã¯ããã¢ãã€ã«ã¢ããªãè€æ°ã®ãµãŒãã¹ãåãèå¥ãæ€èšŒããå¿ èŠãããã·ã¹ãã ã§äººæ°ã§ããè€æ°ã®ããã¯ãšã³ãã€ã³ã¹ã¿ã³ã¹ããã£ãŠãããããããåãããŒã¯ã³ãæ€èšŒããŠåãçããåŸãããŸãã
匷ã¿
JWTã¢ã¯ã»ã¹ããŒã¯ã³ã¯æ€èšŒãéããAPIåŒã³åºãã§æž¡ããããã§ããããã³ããšã³ãã倿°ã®ãšã³ããã€ã³ããåŒã¶ãªããçåœã®ã¢ã¯ã»ã¹ããŒã¯ã³ã«ãããããŒãã·ã³ãã«ã«ãªããŸãïŒçœ²åãæ€èšŒãããŠãŒã¶ãŒIDãèªã¿åããç¶è¡ããŸãã
äŸïŒé¡§å®¢ããŒã¿ã«ãå¥ãµãŒãã¹ã®ãList invoicesãããUpdate profileããåŒã¶ã±ãŒã¹ãJWTã¯é¡§å®¢IDã customer ã®ãããªããŒã«ãéã¹ãã®ã§ãåãµãŒãã¹ã¯ã»ãã·ã§ã³ãæ¯ååç
§ããã«èªå¯ã§ããŸãã
泚æç¹
æå€§ã®ãã¬ãŒããªãã¯åãæ¶ãã§ããããŒã¯ã³ã1æéæå¹ãªããéåžžãã®1æéã¯ã©ãã§ãæå¹ã§ããŠãŒã¶ãŒãããã°ã¢ãŠãããæŒããã管çè ãã¢ã«ãŠã³ããç¡å¹ã«ããŠãã远å ã®ãµãŒããŒåŽãã§ãã¯ãå ¥ããªãéãå¹åã¯ç¶ããŸãã
JWTã¯éåžžã®æ¹æ³ã§æŒæŽ©ããŸããäžè¬çãªå€±æç¹ã«ã¯localStorageïŒXSSã§èªãŸããïŒããã©ãŠã¶ã¡ã¢ãªïŒæªæããæ¡åŒµæ©èœïŒããã°ããšã©ãŒã¬ããŒãããããã·ãè§£æããŒã«ããããããã£ããã£ããããšããµããŒããã£ãããã¹ã¯ãªãŒã³ã·ã§ããã«ã³ããŒãããããŒã¯ã³ãªã©ããããŸãã
ãã®ããJWTã¢ã¯ã»ã¹ããŒã¯ã³ã¯ãæ°žç¶ãã°ã€ã³ãåãã§ã¯ãªããçåœã®ã¢ã¯ã»ã¹ã«åããŠããŸããäžã«æ©åŸ®ãªå人æ å ±ãå ¥ãããæå¹æéãçãããçãŸããããã®æå¹æéãŸã§äœ¿ãããšä»®å®ããèšèšã«ããŠãã ããã
ãªãã¬ãã·ã¥ããŒã¯ã³ïŒJWTæ§æãå®çšçã«ãããã®
JWTã¢ã¯ã»ã¹ããŒã¯ã³ã¯çåœã§ããããšãæãŸããã§ããããã¯å®å šã§ãããçŸå®çãªåé¡ãçã¿ãŸãïŒãŠãŒã¶ãŒãæ°åããšã«åãã°ã€ã³ããã¹ãã§ã¯ãããŸããããªãã¬ãã·ã¥ããŒã¯ã³ã¯ãå€ãã¢ã¯ã»ã¹ããŒã¯ã³ãåãããšãã«ã¢ããªãéãã«æ°ããã¢ã¯ã»ã¹ããŒã¯ã³ãååŸã§ããããã«ããŸãã
ãªãã¬ãã·ã¥ããŒã¯ã³ãã©ãã«ä¿åãããã¯ã¢ã¯ã»ã¹ããŒã¯ã³ä»¥äžã«éèŠã§ãããã©ãŠã¶ããŒã¹ã®ãŠã§ãã¢ããªã§ã¯ãJavaScriptããèªããªãHttpOnlyãã€Secureãªã¯ãããŒã«çœ®ãã®ãæãå®å šãªæ¢å®ã§ããlocalStorageã¯å®è£ ãç°¡åã§ãããXSSãã°ããããšçãŸãããããªããŸããè åšã¢ãã«ãXSSãå«ããªããé·æéæå¹ãªç§å¯ãJavaScriptã§èªããå Žæã«çœ®ãã®ã¯é¿ããŠãã ããã
ããŒããŒã·ã§ã³ããããªãã¬ãã·ã¥ããŒã¯ã³ãå®éçšã§å®çšçã«ããŸããåããªãã¬ãã·ã¥ããŒã¯ã³ãäœé±éã䜿ã代ããã«ã䜿çšãããã³ã«å ¥ãæ¿ããŸãïŒã¯ã©ã€ã¢ã³ãããªãã¬ãã·ã¥ããŒã¯ã³Aãæç€ºãããšããµãŒããŒã¯æ°ããã¢ã¯ã»ã¹ããŒã¯ã³ãšãªãã¬ãã·ã¥ããŒã¯ã³Bãçºè¡ããAã¯ç¡å¹ã«ãªããŸãã
ã·ã³ãã«ãªããŒããŒã·ã§ã³éçšã¯é垞次ã®ã«ãŒã«ã«åŸããŸãïŒ
- ã¢ã¯ã»ã¹ããŒã¯ã³ã¯çãä¿ã€ïŒååäœãæéã§ã¯ãªãïŒã
- ãªãã¬ãã·ã¥ããŒã¯ã³ã¯ãµãŒããŒåŽã§ã¹ããŒã¿ã¹ãšæçµäœ¿çšæéãä¿æããã
- ãªãã¬ãã·ã¥æã«ããŒããŒã·ã§ã³ããåã®ããŒã¯ã³ãç¡å¹ã«ããã
- å¯èœãªããªãã¬ãã·ã¥ããŒã¯ã³ãããã€ã¹ããã©ãŠã¶ã«çŽã¥ããã
- äžæ£å©çšã調æ»ã§ããããã«ãªãã¬ãã·ã¥ã€ãã³ãããã°ã«æ®ãã
åå©çšæ€ç¥ãéèŠãªèŠå ±ã§ãããªãã¬ãã·ã¥ããŒã¯ã³Aãæ¢ã«äº€æãããŠããã®ã«åã³äœ¿ãããããããã¯ã³ããŒããããšä»®å®ããŸããäžè¬çãªå¯Ÿå¿ã¯ã»ãã·ã§ã³å šäœïŒå Žåã«ãã£ãŠã¯ãã®ãŠãŒã¶ãŒã®å šã»ãã·ã§ã³ïŒãåãæ¶ããŠåãã°ã€ã³ãèŠæ±ããããšã§ããã©ã¡ããæ¬ç©ã®ã³ããŒãã倿ã§ããªãããã§ãã
ãã°ã¢ãŠãã«é¢ããŠã¯ããµãŒããŒã§åŒ·å¶ã§ããä»çµã¿ãå¿ èŠã§ããéåžžã¯ãªãã¬ãã·ã¥ããŒã¯ã³ã®ç¡å¹åã瀺ãã»ãã·ã§ã³ããŒãã«ïŒãŸãã¯åãæ¶ããªã¹ãïŒãæã€ããšãæå³ããŸããã¢ã¯ã»ã¹ããŒã¯ã³ã¯æå¹æéãŸã§åããããããŸããããæå¹æéãçãããããšã§ãã®ãŠã£ã³ããŠãå°ããã§ããŸãã
ãã°ã¢ãŠãèŠä»¶ãšå®éã«å®çŸã§ããããš
ãã°ã¢ãŠãã¯å®çŸ©ãããšåçŽã§ã¯ãªããªããŸããéåžžã¯äºã€ã®èŠæ±ããããŸãïŒããã®ããã€ã¹ããã°ã¢ãŠããããïŒãããã©ãŠã¶ãé»è©±ïŒãšãå šãŠã®ããã€ã¹ããã°ã¢ãŠããããïŒå šã¢ã¯ãã£ãã»ãã·ã§ã³ïŒã
ãŸãã¿ã€ãã³ã°ã®åé¡ããããŸããã峿ãã°ã¢ãŠããã¯ãã®è³æ Œæ å ±ãä»ããåãä»ããªãããããšãæå³ããŸãããæéåãã«ãããã°ã¢ãŠããã¯çŸåšã®ã»ãã·ã§ã³ãããŒã¯ã³ã®èªç¶ãªæéåãã§åãä»ããªãããããšãæå³ããŸãã
ã¯ãããŒããŒã¹ã®ã»ãã·ã§ã³ã§ã¯ã峿ãã°ã¢ãŠãã¯ç°¡åã§ãããµãŒããŒãã»ãã·ã§ã³ãææããŠããããã§ããã¯ã©ã€ã¢ã³ãåŽã§ã¯ãããŒãåé€ãããµãŒããŒåŽã®ã»ãã·ã§ã³ã¬ã³ãŒããç¡å¹ã«ããã°å®äºããŸãã以åã«ã¯ãããŒã®å€ãã³ããŒãããŠãããšããŠãããµãŒããŒã®æåŠããã°ã¢ãŠããå®éã«åŒ·å¶ããŸãã
JWTã®ã¿ã®èªèšŒïŒã¹ããŒãã¬ã¹ãªã¢ã¯ã»ã¹ããŒã¯ã³ã§ãµãŒããŒåç §ããªãïŒã¯ãçã®æå³ã§ã®å³æãã°ã¢ãŠããä¿èšŒã§ããŸãããçãŸããJWTã¯æå¹æéãŸã§æå¹ã ããã§ããæåŠãªã¹ãïŒdenylistïŒã远å ã§ããŸããããã®å Žåã¯ç¶æ ãä¿æããŠãã§ãã¯ããããšã«ãªããå ã®åçŽãã¯å€±ãããŸãã
å®éçãªãã¿ãŒã³ã¯ã¢ã¯ã»ã¹ããŒã¯ã³ãçåœã«ãããã°ã¢ãŠãã¯ãªãã¬ãã·ã¥ããŒã¯ã³ã§ç®¡çããããšã§ããã¢ã¯ã»ã¹ããŒã¯ã³ã¯æ°åã®ç¶äºãæã£ãŠåãç¶ããŸãããã»ãã·ã§ã³ãç¶æããã®ã¯ãªãã¬ãã·ã¥ããŒã¯ã³ã§ããã©ããããããçãŸããå Žåããªãã¬ãã·ã¥ããŒã¯ã³ã®äžæãåãæ¶ãã°å°æ¥ã®ã¢ã¯ã»ã¹ãçŽ æ©ãåããŸãã
ãŠãŒã¶ãŒã«å®éã«çŽæã§ããããšïŒ
- ãã®ããã€ã¹ããã°ã¢ãŠãïŒãã®ã»ãã·ã§ã³ãŸãã¯ãªãã¬ãã·ã¥ããŒã¯ã³ãåãæ¶ããããŒã«ã«ã®ã¯ãããŒãã¹ãã¬ãŒãžãåé€ããã
- å šãŠããã°ã¢ãŠãïŒãã®ã¢ã«ãŠã³ãã®å šã»ãã·ã§ã³ãå šãªãã¬ãã·ã¥ããŒã¯ã³ã®ãã¡ããªãŒãåãæ¶ãã
- ã峿ã广ïŒãµãŒããŒã»ãã·ã§ã³ã§ã¯ä¿èšŒããããã¢ã¯ã»ã¹ããŒã¯ã³ã§ã¯æå¹æéãŸã§ã¯ãã¹ããšãã©ãŒãã
- 匷å¶ãã°ã¢ãŠãã€ãã³ãïŒãã¹ã¯ãŒã倿Žãã¢ã«ãŠã³ãç¡å¹åãããŒã«éæ Œãªã©ã
ãã¹ã¯ãŒã倿Žãã¢ã«ãŠã³ãç¡å¹åã§ã¯ããŠãŒã¶ãŒããã°ã¢ãŠãããã®ãåŸ ã€ãã¹ãã§ã¯ãããŸãããã¢ã«ãŠã³ãå šäœã®ã»ãã·ã§ã³ããŒãžã§ã³ïŒãŸãã¯ããã®æå»ä»¥éæå¹ãã¿ã€ã ã¹ã¿ã³ãïŒãä¿åããŠãããåãªãã¬ãã·ã¥ïŒå Žåã«ãã£ãŠã¯åãªã¯ãšã¹ãïŒã§æ¯èŒããŸããå€ãã£ãŠããã°æåŠããŠåãµã€ã³ã€ã³ãèŠæ±ããŸãã
ã¹ããããã€ã¹ãããïŒã¢ããªã«é©ããã»ãã·ã§ã³æ¹åŒã®éžã³æ¹
ã»ãã·ã§ã³èšèšãåçŽã«ä¿ã¡ãããªããä»çµã¿ãéžã¶åã«ã«ãŒã«ã決ããŠãã ãããå€ãã®åé¡ã¯ãããŒã ããªã¹ã¯ããã°ã¢ãŠãèŠä»¶ã«åãããã«JWTãã¯ãããŒã人æ°ã ãããšéžãã§ããŸããšããããå§ãŸããŸãã
ãŸããŠãŒã¶ãŒãã©ãã§ãµã€ã³ã€ã³ããããå šéšæžãåºããŠãã ããããã©ãŠã¶ã¢ããªã¯ãã€ãã£ãã¢ãã€ã«ã¢ããªãå éšç®¡çããŒã«ãããŒãããŒçµ±åãšç°ãªãæ¯ãèããããŸããããããå®å šã«ä¿åã§ããå Žæããã°ã€ã³ã®æŽæ°æ¹æ³ãããã°ã¢ãŠãããæå³ããããšãå€ããŸãã
å€ãã®ããŒã ã§å®çšçãªé åºã¯æ¬¡ã®éãã§ãïŒ
- ã¯ã©ã€ã¢ã³ããåæããïŒWebãiOS/Androidãå éšããŒã«ããµãŒãããŒãã£ã¢ã¯ã»ã¹ã
- ããã©ã«ãã®è åšã¢ãã«ã決ããïŒXSSãCSRFãããã€ã¹çªçãªã©ã
- ãã°ã¢ãŠããäœãä¿èšŒãã¹ãããæ±ºããïŒãã®ããã€ã¹ãå šããã€ã¹ã管çè ã«ãã匷å¶ãã°ã¢ãŠãã
- ããŒã¹ã©ã€ã³ãã¿ãŒã³ãéžã¶ïŒã¯ãããŒããŒã¹ã®ã»ãã·ã§ã³ïŒãµãŒããŒã§èšæ¶ïŒããã¢ã¯ã»ã¹ããŒã¯ã³ïŒãªãã¬ãã·ã¥ããŒã¯ã³ãã
- ã¿ã€ã ã¢ãŠããšå¿çã«ãŒã«ãèšå®ããïŒã¢ã€ãã«å¥ãšçµ¶å¯Ÿæå¹æéãçãããåå©çšãèŠããšãã®å¯Ÿå¿ã
ãã®åŸãã·ã¹ãã ãå®éã«çŽæããå å®¹ãææžåããŸããäŸïŒããŠã§ãã»ãã·ã§ã³ã¯ã¢ã€ãã«ã§30åãæå€§ã§7æ¥ã§å€±å¹ã管çè ã¯60ç§ä»¥å ã«åŒ·å¶ãã°ã¢ãŠãã§ãããçŽå€±ããé»è©±ã¯é éã§ç¡å¹åã§ãããã ããããæèšã¯ã䜿ãã©ã€ãã©ãªããéèŠã§ãã
æåŸã«ãããªãã®ãã¿ãŒã³ã«åã£ãç£èŠã远å ããŠãã ãããããŒã¯ã³æ§æã§ã¯ã匷åãªã·ã°ãã«ã¯ãªãã¬ãã·ã¥ããŒã¯ã³ã®åå©çšã§ãïŒåãããŒã¯ã³ãäºåºŠäœ¿ãããïŒããããçé£ãšèŠãªããã»ãã·ã§ã³ãã¡ããªãåãæ¶ããŠãŠãŒã¶ãŒãžéç¥ããããã«ããŸãããã
ã¢ã«ãŠã³ãä¹ã£åãã«ã€ãªããäžè¬çãªãã¹
å€ãã®ã¢ã«ãŠã³ãä¹ã£åãã¯ãè³¢ãããã¯ãã§ã¯ãªããäºæž¬å¯èœãªã»ãã·ã§ã³ãã¹ã«ããåçŽãªåå©ã§ããè¯ãã»ãã·ã§ã³åŠçã¯æ»æè ã«è³æ Œæ å ±ãçãã ãåå©çšãããããç°¡åãªæ¹æ³ãäžããªãããšã«å°œããŸãã
ããããèœãšã穎ã®äžã€ã¯ã¢ã¯ã»ã¹ããŒã¯ã³ãlocalStorageã«çœ®ããXSSãçºçããªãããšãæåŸ ããããšã§ããããŒãžäžã§ã¹ã¯ãªãããå®è¡ãããã°ïŒäžåœãªäŸåãåã蟌ã¿ãŠã£ãžã§ãããä¿åãããã³ã¡ã³ããªã©ïŒãlocalStorageãèªãã§ããŒã¯ã³ãéä¿¡ã§ããŸããHttpOnly ãã©ã°ãä»ããã¯ãããŒã¯ãã®ãªã¹ã¯ãæžãããŸãã
ããäžã€ã®èœãšã穎ã¯ãªãã¬ãã·ã¥ããŒã¯ã³ãé¿ããããã«JWTãé·æéæå¹ã«ããããšã§ãã7æ¥éæå¹ãªã¢ã¯ã»ã¹ããŒã¯ã³ã¯ãæŒæŽ©ããã°7æ¥éã®åå©çšãŠã£ã³ããŠãäžããŸããçãã¢ã¯ã»ã¹ããŒã¯ã³ãšé©åã«ç®¡çããããªãã¬ãã·ã¥ããŒã¯ã³ã®çµåãã¯ãç¹ã«ãªãã¬ãã·ã¥ãåããå Žåã«æªçšãé£ããããŸãã
ã¯ãããŒã«ã¯CSRF察çãå¿ãããšããèªåã®è¶³ãæã€èœãšã穎ããããŸããã¯ãããŒèªèšŒã§ç¶æ 倿Žãªã¯ãšã¹ããCSRFé²åŸ¡ãªãã«åãä»ãããšãæªæãããµã€ãããã°ã€ã³æžã¿ãã©ãŠã¶ã«æå¹ãªãªã¯ãšã¹ããéãããããšãã§ããŸãã
ã€ã³ã·ãã³ãã¬ãã¥ãŒã§ããèŠã€ããä»ã®ãã¹ïŒ
- ãªãã¬ãã·ã¥ããŒã¯ã³ããŸã£ããããŒããŒã·ã§ã³ããŠããªãããŸãã¯ããŒããŒã·ã§ã³ããŠãåå©çšãæ€åºããŠããªãã
- è€æ°ã®ãã°ã€ã³æ¹æ³ïŒã¯ãããŒã»ãã·ã§ã³ãšãã¢ã©ãŒããŒã¯ã³ïŒããµããŒãããŠããŠããµãŒããŒåŽã§ãã©ã¡ããåªå ãããããã®ã«ãŒã«ãäžæç¢ºã
- ããŒã¯ã³ããã°ã«æ®ãïŒãã©ãŠã¶ã³ã³ãœãŒã«ãè§£æã€ãã³ãããµãŒããŒãªã¯ãšã¹ããã°ïŒãããã«ããã³ããŒããä¿æãããã
å
·äœäŸïŒãµããŒãæ
åœè
ãããããã°ãã°ãããã±ããã«è²Œãä»ãããã®ãã°ã« Authorization ããããå«ãŸããŠãããšããŸãããã±ããã«ã¢ã¯ã»ã¹ã§ãã誰ã§ããã®ããŒã¯ã³ããªãã¬ã€ããŠæ
åœè
ãšããŠæäœã§ããŸããããŒã¯ã³ã¯ãã¹ã¯ãŒãã®ããã«æ±ã£ãŠãã ããïŒå°å·ããªããä¿åããªããçåœã«ããã
åºè·åã«è¡ãç°¡åãªãã§ãã¯
ã»ãšãã©ã®ã»ãã·ã§ã³ãã°ã¯é£ããæå·ã®åé¡ã§ã¯ãããŸãããäžã€ã®ãã©ã°ã®ä»ãå¿ããé·ãçããããŒã¯ã³ãåèªèšŒãèŠæ±ãã¹ããšã³ããã€ã³ãã®èŠèœãšãã§ãã
ãªãªãŒã¹åã«ãçãŸããã¯ãããŒãããŒã¯ã³ã§æ»æè ãäœãã§ãããã«çŠç¹ãåœãŠãçããã¹ãå®è¡ããŠãã ãããããã¯å šäœãæžãæããã«ã»ãã¥ãªãã£ãåäžãããæéã®æ¹æ³ã®äžã€ã§ãã
ãªãªãŒã¹åãã§ãã¯ãªã¹ã
ã¹ããŒãžã³ã°ã§ãããã確èªããæ¬çªã§ãå床ãã§ãã¯ããŠãã ããïŒ
- ã¢ã¯ã»ã¹ããŒã¯ã³ãçãä¿ã€ïŒååäœïŒããšãAPIãæéåãåŸã«å®éã«æåŠããããšã確èªããã
- ãªãã¬ãã·ã¥ããŒã¯ã³ã¯ãã¹ã¯ãŒãã®ããã«æ±ãïŒã§ããã°JavaScriptããèªããªãå Žæã«ä¿ç®¡ãããªãã¬ãã·ã¥å°çšã®ãšã³ããã€ã³ãã«ã ãéä¿¡ãã䜿çšããšã«ããŒããŒã·ã§ã³ããã
- ã¯ãããŒã§èªèšŒãããªããã©ã°ã確èªããïŒHttpOnly ããªã³ãSecure ããªã³ãSameSite ãæå³çã«èšå®ãã¯ãããŒã®ã¹ã³ãŒãïŒãã¡ã€ã³ãšãã¹ïŒãå¿ èŠä»¥äžã«åºããªãããšã確èªããã
- ã¯ãããŒã§èªèšŒããå Žåã¯CSRFé²åŸ¡ã远å ããç¶æ 倿Žãšã³ããã€ã³ããCSRFä¿¡å·ãªãã«å€±æããããšã確èªããã
- åãæ¶ããçŸå®çã«ããïŒãã¹ã¯ãŒããªã»ãããã¢ã«ãŠã³ãç¡å¹åã®åŸãæ¢åã»ãã·ã§ã³ãéããã«æ©èœããªããªãããšã確èªããïŒãµãŒããŒåŽã»ãã·ã§ã³åé€ããªãã¬ãã·ã¥ããŒã¯ã³ã®ç¡å¹åããŸãã¯ãã»ãã·ã§ã³ããŒãžã§ã³ããã§ãã¯ïŒã
ãã®åŸããã°ã¢ãŠãã®çŽæããã¹ãããŠãã ãããããã°ã¢ãŠããã¯å€ãã®å ŽåãããŒã«ã«ã»ãã·ã§ã³ãåé€ãããããšãæå³ããŸããããŠãŒã¶ãŒã¯ãã以äžãæåŸ ããŸãã
å®çšçãªãã¹ãïŒã©ããããããšæºåž¯ã§ãã°ã€ã³ãããã¹ã¯ãŒãã倿ŽããŸããã©ãããããã¯æ¬¡ã®ãªã¯ãšã¹ãã§åŒ·å¶ãã°ã¢ãŠããããã¹ãã§ãæ°æéåŸã§ãã£ãŠã¯ãããŸããããããå šãŠããã°ã¢ãŠãããšããã€ã¹äžèЧãæäŸãããªããåããã€ã¹ãåãæ¶ãå¯èœãªå¥ã ã®ã»ãã·ã§ã³ãŸãã¯ãªãã¬ãã·ã¥ããŒã¯ã³ã¬ã³ãŒãã«å¯Ÿå¿ããŠããããšã確èªããŠãã ããã
äŸïŒã¹ã¿ããã¢ã«ãŠã³ããšåŒ·å¶ãã°ã¢ãŠããããã«ã¹ã¿ããŒããŒã¿ã«
å°ããªäºæ¥ãããããŠã§ãã®ã«ã¹ã¿ããŒããŒã¿ã«ïŒé¡§å®¢ã¯è«æ±æžç¢ºèªããã±ããäœæïŒãçŸå Žã¹ã¿ããçšã®ã¢ãã€ã«ã¢ããªïŒäœæ¥ãããŒããåçïŒãæã£ãŠãããšæ³åããŠãã ãããã¹ã¿ããã¯é»æ³¢ã®å±ããªãå°äžã§äœæ¥ããããšããããã¢ããªã¯ããçšåºŠãªãã©ã€ã³ã§ãåäœããå¿ èŠããããŸãã管çè ã¯å€§ããªèµ€ããã¿ã³ã欲ããããŸãïŒã¿ãã¬ãããçŽå€±ãããå¥çŽè ãéè·ãããããã匷å¶ãã°ã¢ãŠãããããšã
ããã«äžã€ã®å ±éè åšã远å ããŸãïŒãã³ã®å ±æã¿ãã¬ããïŒèª°ãããµã€ã³ã¢ãŠããå¿ããïŒããã£ãã·ã³ã°ïŒã¹ã¿ãããåœããŒãžã«èªèšŒæ å ±ãå ¥åããïŒãããŒã¿ã«ã«ææçºçããXSSãã°ïŒã¹ã¯ãªããããã©ãŠã¶ã§åãããŒã¯ã³ãçãããšããïŒã
å®çšçãªæ§æã¯çåœã®ã¢ã¯ã»ã¹ããŒã¯ã³ãšããŒããŒã·ã§ã³ãããªãã¬ãã·ã¥ããŒã¯ã³ããããŠãµãŒããŒåŽã®åãæ¶ãèšé²ã®çµåãã§ããããã«ããé«éãªAPIåŒã³åºããšãªãã©ã€ã³ã®èš±å®¹ããã€ç®¡çè ãã»ãã·ã§ã³ãåããããšãäž¡ç«ã§ããŸãã
å ·äœäŸïŒ
- ã¢ã¯ã»ã¹ããŒã¯ã³å¯¿åœïŒ5ã15åã
- ãªãã¬ãã·ã¥ããŒã¯ã³ã®ããŒããŒã·ã§ã³ïŒãªãã¬ãã·ã¥ã®ãã³ã«æ°ãããªãã¬ãã·ã¥ããŒã¯ã³ãè¿ããå€ããã®ãç¡å¹åããã
- ãªãã¬ãã·ã¥ããŒã¯ã³ã®å®å šãªä¿ç®¡ïŒWebã§ã¯ãªãã¬ãã·ã¥ããŒã¯ã³ãHttpOnlyãã€Secureãªã¯ãããŒã«å ¥ããã¢ãã€ã«ã§ã¯OSã®ã»ãã¥ã¢ã¹ãã¬ãŒãžã«å ¥ããã
- ãµãŒããŒåŽã§ãªãã¬ãã·ã¥ããŒã¯ã³ã远跡ïŒããŒã¯ã³ã¬ã³ãŒãïŒãŠãŒã¶ãŒãããã€ã¹ãçºè¡æå»ãæçµäœ¿çšæå»ãç¡å¹ãã©ã°ïŒãä¿åãããããŒããŒã·ã§ã³åŸã®ããŒã¯ã³ãåå©çšããããçé£ãšèŠãªãããã§ãŒã³å šäœãåãæ¶ãã
匷å¶ãã°ã¢ãŠãã¯å®å¹åã§ããŸãïŒç®¡çè ããã®ããã€ã¹ïŒãŸãã¯ãŠãŒã¶ãŒã®å šããã€ã¹ïŒã®ãªãã¬ãã·ã¥ããŒã¯ã³ã¬ã³ãŒããåãæ¶ããŸããçãŸããããã€ã¹ã¯çŸåšã®ã¢ã¯ã»ã¹ããŒã¯ã³ãã¢ã¯ã»ã¹ããŒã¯ã³ã®æå¹æéãŸã§ã¯äœ¿ãç¶ãããããããŸããããæ°ããããŒã¯ã³ã¯ååŸã§ããŸããããããã£ãŠå®å šã«ã¢ã¯ã»ã¹ãåãæå€§æéã¯ã¢ã¯ã»ã¹ããŒã¯ã³ã®å¯¿åœã§ãã
çŽå€±ããã€ã¹ã«ã€ããŠã¯ã次ã®ãããªå¹³æãªã«ãŒã«ãå®çŸ©ããŠãã ããïŒã10å以å ã«ã¢ããªã¯åæã忢ããå床ãµã€ã³ã€ã³ãå¿ èŠã«ãªããŸããããªãã©ã€ã³äœæ¥ã¯ããã€ã¹äžã§ç¶ããããŸãããæ¬¡ã«ãªã³ã©ã€ã³ã§åæããããšãããšãµã€ã³ã€ã³ãå¿ èŠã«ãªããŸãã
次ã®ã¹ãããïŒå®è£ ããã¹ãããããŠä¿å®å¯èœã«ä¿ã€
ããã°ã¢ãŠãããäœãæå³ãããããããã¯ãã®å¹³æãªèšèã§æžãäžããŠãã ãããäŸïŒããã®ããã€ã¹ã®ãã°ã¢ãŠãã¯ç«¯æ«äžã®ã¢ã¯ã»ã¹ãåé€ããããå šãŠã®ããã€ã¹ããã°ã¢ãŠããããš1å以å ã«å šç«¯æ«ãããã¯ã¢ãŠããããããã¹ã¯ãŒã倿Žã¯ä»ã®ã»ãã·ã§ã³ããã°ã¢ãŠãããããããããã®çŽæããµãŒããŒåŽã»ãã·ã§ã³ãåãæ¶ããªã¹ããçåœããŒã¯ã³ã®ã©ããå¿ èŠãšããããæ±ºããŸãã
çŽæãå°ããªãã¹ãèšç»ã«èœãšã蟌ã¿ãŸããããããŒã¯ã³ãã»ãã·ã§ã³ã®ãã°ã¯ããããŒãã¹ã®ãã¢ã§ã¯åé¡ãªãèŠããããšãå€ããå®éã®éçšïŒã¹ãªãŒãã¢ãŒããæç¶çãããã¯ãŒã¯ãè€æ°ããã€ã¹ïŒã§å€±æããŸãã
å®çšçãªãã¹ããã§ãã¯ãªã¹ã
次ã®ãããªã±ãŒã¹ãã«ããŒãããã¹ããå®è¡ããŠãã ããïŒ
- æå¹æéïŒã¢ã¯ã»ã¹ããŒã¯ã³ãã»ãã·ã§ã³ãæéåãæã«ã¢ã¯ã»ã¹ãæ¢ããããã©ãŠã¶ãéãããŸãŸã§ãæå¹æéåŸã«æ¢ãŸãããšã
- åãæ¶ãïŒ"å šãŠããã°ã¢ãŠã" ã®åŸãå€ãè³æ Œæ å ±ãæ¬¡ã®ãªã¯ãšã¹ãã§å€±æããããšã
- ããŒããŒã·ã§ã³ïŒãªãã¬ãã·ã¥ããŒã¯ã³ã®ããŒããŒã·ã§ã³ãæ°ããããŒã¯ã³ãçºè¡ããå€ãããŒã¯ã³ãç¡å¹ã«ããããšã
- åå©çšæ€ç¥ïŒå€ããªãã¬ãã·ã¥ããŒã¯ã³ããªãã¬ã€ãããšããã¯ããŠã³å¿çãèµ·ããããšã
- ãã«ãããã€ã¹ïŒããã®ããã€ã¹ã®ã¿ããšãå šããã€ã¹ãã®ã«ãŒã«ã匷å¶ãããUIãããã«äžèŽããããšã
ãã¹ãåŸãããŒã ã§ç°¡åãªæ»æãªããŒãµã«ãè¡ã£ãŠãã ãããäžã€ã®ã¹ããŒãªãŒãéžã³ããšã³ãããŒãšã³ãã§æ€èšŒããŸãïŒããŒã¯ã³ãèªã¿åããXSSãã°ãã¯ãããŒã»ãã·ã§ã³ã«å¯ŸããCSRF詊è¡ãã¢ã¯ãã£ãã»ãã·ã§ã³ãæã€çŽå€±é»è©±ãèšèšãçŽæãšäžèŽããŠãããã確èªããŸãã
è¿ éã«é²ããå¿ èŠããããªããã«ã¹ã¿ã ã®æ¥çã³ãŒããæžãããŠãã ãããAppMasterïŒappmaster.ioïŒã¯ãçæãããæ¬çªå¯Ÿå¿ã®ããã¯ãšã³ããšãŠã§ãã»ãã€ãã£ãã®ã¢ããªãæäŸãããªãã·ã§ã³ã®äžã€ã§ãexpiryãããŒããŒã·ã§ã³ã匷å¶ãã°ã¢ãŠãã®ã«ãŒã«ãã¯ã©ã€ã¢ã³ãéã§äžè²«ãããã®ã«åœ¹ç«ã¡ãŸãã
ããŒã³ãåŸã®ãã©ããŒã¢ããã¬ãã¥ãŒãã¹ã±ãžã¥ãŒã«ããŠãã ãããå®éã®ãµããŒããã±ãããã€ã³ã·ãã³ãã䜿ã£ãŠã¿ã€ã ã¢ãŠããã»ãã·ã§ã³å¶éã"å šãŠããã°ã¢ãŠã" ã®æåã調æŽããä¿®æ£ãéãã«éè¡ããªãããã«åããã§ãã¯ãªã¹ããåå®è¡ããŸãã


