ãã ããæè¿ãéçºè ã¯ããŸããŸãªçç±ã§CookieãšãµãŒããŒã»ãã·ã§ã³ã®äœ¿çšãæåŠããããšããŠããã代æ¿ã®èªèšŒæ¹æ³ãæ¢ããŠããŸãã ãã®1ã€ã¯ãJSON Web TokenïŒJWTïŒã®äœ¿çšã§ããããã¯ãèªèšŒãšæ¿èªã«å¿ èŠãªãã¹ãŠã®æå°éã®æ å ±ãæå·åããã圢åŒã§å«ãããŒã¯ã³ã§ãã åæã«ãããŒã«ãŒã¯èªå·±å®çµåã§ãããããã»ãã·ã§ã³ã«ãŠãŒã¶ãŒããŒã¿ãä¿åããå¿ èŠã¯ãããŸããã ãã ããããã«ãããJWTã®å¶åŸ¡ã«ç¹å®ã®å°é£ãè¿œå ãããCookieã«å¯Ÿãããã¹ãŠã®å©ç¹ãç¡å¹ã«ãªããŸãã ã€ã³ã¿ãŒãããäžã§ããããã®åé¡ã«å¯Ÿããããã€ãã®è§£æ±ºçãèŠã€ããŸãããããã§ã¯ããã®ã·ã³ãã«ãã§å€ãã®ãããžã§ã¯ãã®ããŒãºãæºãã代æ¿ãªãã·ã§ã³ãæäŸããããšæããŸãã
ç§ã®æèŠã§ã¯ãéçºè ãã¯ãããŒãšã»ãã·ã§ã³ãæåŠã§ããäž»ãªçç±ã¯æ¬¡ã®ãšããã§ãã
- éçºè ã¯ãŸããŸããåäžããŒãžWebã¢ããªã±ãŒã·ã§ã³ïŒSPAïŒã«åãæ¿ããŠãAPIãä»ããŠãµãŒããŒã«ã¢ã¯ã»ã¹ããŠããŸãã åãAPIã䜿çšããŠãã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ãæäŸããŸãã ãŸããèªèšŒã¢ãããŒããçµ±äžããããã«ãã¢ãã€ã«ãã©ãããã©ãŒã ã§ã®Cookieã®äœ¿çšã¯é£ãããããã¢ã¯ã»ã¹ããŒã¯ã³ã®äœ¿çšã奜ã¿ãŸãã
- Webã¢ããªã±ãŒã·ã§ã³ãæ°Žå¹³æ¹åã«ã¹ã±ãŒãªã³ã°ããããšïŒWebãã¡ãŒã ïŒããµãŒããŒéã§ã»ãã·ã§ã³ç¶æ ãåæãããšããåé¡ãçºçããŸãã ãã¡ããããã«ã¯è§£æ±ºçããããŸãããã»ãã·ã§ã³ããŸã£ãã䜿çšããå¿ èŠã®ãªãã¹ããŒãã¬ã¹ã¢ããªã±ãŒã·ã§ã³ãäœæããæ¹ãç°¡åã§ãã JWTã¯ãã®åé¡ã解決ããŸãã
JWTèªäœã«ã¯ãCookieãšåæ§ã«ãç¬èªã®æå¹æéããããæãåçŽãªå Žåã¯æ¬¡ã®ããã«äœ¿çšãããŸãã
- ãŠãŒã¶ãŒã¯ããŠãŒã¶ãŒåãšãã¹ã¯ãŒããéä¿¡ããããšã«ããããµãŒããŒïŒããã³äžè¬çã«ã¯æ¿èªãµãŒããŒïŒããã®ã¢ã¯ã»ã¹ãèŠæ±ããŸãã
- æ¿èªãµãŒããŒã¯ãŠãŒã¶ãŒã®æå¹æ§ã確èªããç¹å®ã®æå¹æéïŒããšãã°ã2é±éåŸïŒãæã€ã¢ã¯ã»ã¹ããŒã¯ã³ããŠãŒã¶ãŒã«éä¿¡ããŸãã
- ãŠãŒã¶ãŒã¯ãã®ã¢ã¯ã»ã¹ããŒã¯ã³ã䜿çšããŠããµãŒããŒïŒããã³éåžžã¯ãªãœãŒã¹ãµãŒããŒïŒäžã®ãªãœãŒã¹ã«ã¢ã¯ã»ã¹ããŸãã
- æå¹æéïŒ2é±éåŸïŒã«ããŠãŒã¶ãŒã¯èªèšŒæé ãå床å®è¡ããå¿ èŠããããŸãã
ãã®ã¢ãããŒãã®äž»ãªæ¬ ç¹ã¯ãæå¹æéãçãå ŽåããŠãŒã¶ãŒããŠãŒã¶ãŒåãšãã¹ã¯ãŒããå ¥åããå¿ èŠãããããšã§ãïŒããã¯ããã¹ã¯ãŒãã®é »ç¹ãªè»¢éã«é¢ããŠäžäŸ¿ã§å®å šæ§ãäœãïŒã ãŸãã¯ãåçŽã«é·ãæå¹æéïŒããšãã°ã1幎ïŒã䜿çšããããšããå§ãããŸãã ãã ãããã®ã¢ãããŒãã§ã¯å€ãã®åé¡ãçºçããŸãã
- ã¢ã¯ã»ã¹ããŒã¯ã³ãçãŸããå ŽåïŒXSSã®è匱æ§ãªã©ãä»ããŠïŒãæ»æè ã¯é·æéãªãœãŒã¹ã«ã¢ã¯ã»ã¹ããå¯èœæ§ããããŸãã
- 管çè ããŠãŒã¶ãŒã®æš©å©ãå¶éãããã圹å²ãå€æŽãããå Žåã¯ãã¢ã¯ã»ã¹ããŒã¯ã³ãæŽæ°ãããããã«ããŠãŒã¶ãŒã¯å床èªèšŒæé ãå®è¡ããå¿ èŠããããŸãã
åè¿°ã®åé¡ã解決ããããã«ãçæã¢ã¯ã»ã¹ããŒã¯ã³ãšãšãã«ã2çªç®ã®é·æéå®è¡ãªãã¬ãã·ã¥ããŒã¯ã³ãè¿œå ã§äœ¿çšããããšããã°ãã°ææ¡ãããŸãã åæã«ãèªèšŒäžã«ããŠãŒã¶ãŒã¯æŽæ°ããŒã¯ã³ïŒæå¹æéã1幎ãªã©ïŒãšã¢ã¯ã»ã¹ããŒã¯ã³ïŒ30åãªã©ïŒãåãåããŸãã ãŸãããªãœãŒã¹ãžã®ã¢ã¯ã»ã¹ã«ã¯åŒãç¶ãã¢ã¯ã»ã¹ããŒã¯ã³ã䜿çšããŸãããæ°ããã¢ã¯ã»ã¹ããŒã¯ã³ãååŸããããã«30ååŸã圌ã¯ãªãã¬ãã·ã¥ããŒã¯ã³ãæ¿èªãµãŒããŒã«éä¿¡ããã ãã§ãå¿çããŠæ°ããã¢ã¯ã»ã¹ããŒã¯ã³ãéä¿¡ããŸãããŠãŒã¶ãŒæš©éã
æŽæ°ããŒã¯ã³ã¢ãããŒãã¯ãã¯ã©ã€ã¢ã³ãã³ãŒããšãµãŒããŒã³ãŒãã®äž¡æ¹ãããªãè€éã«ããŸãã åæã«ããŠãŒã¶ãŒã®ãã¹ãŠã®æŽæ°ããŒã¯ã³ãšã¯ã©ã€ã¢ã³ãIDããã³ãã®ä»ã®è¿œå æ å ±ãä¿åããå¿ èŠããããŸãã
ãŠãŒã¶ãŒããã°ã€ã³åŸã«ãªãœãŒã¹ãç¡éã«äœ¿çšããããã«ãããå Žåã¯ãããŒã¯ã³ã«ã¹ã©ã€ãåŒã®æå¹æéãå®è£ ããããšããå§ãããŸãã ã€ãŸããæãåçŽãªïŒæåã®ïŒå Žåãã¢ã¯ã»ã¹ããŒã¯ã³ãåä¿¡ãããšããµãŒããŒã¯æå¹æéïŒãŸãã¯ãã®éœåºŠïŒã«è¿ã¥ããšãæ¥ä»ãã·ãããããæ°ããã¢ã¯ã»ã¹ããŒã¯ã³ããŠãŒã¶ãŒã«éä¿¡ããŸãã ããŒã¯ã³ã®çé£ãçºçããå Žåã®ãã®ãããªã¢ãããŒãã¯ãæ»æè ãç¡éã«ãªãœãŒã¹ã䜿çšã§ãããšããäºå®ã«ã€ãªãããŸãã
2çªç®ã®å Žåãåãããšãè¡ãããŸãããæŽæ°ããŒã¯ã³ã«å¯ŸããŠã®ã¿ã§ãã
å®éã«ç§ãèŠã€ããã¢ãããŒãã¯ãã¹ãŠããã«ãããŸãã 次ã«ãç°¡åã«ããããã«ã¢ã¯ã»ã¹ããŒã¯ã³ã1ã€ã ãã«å¶éããŸãããåæã«æå¹æéãã¹ã©ã€ãããçé£ã®å Žåã«ã¢ã¯ã»ã¹èš±å¯ãå€æŽããã¢ã¯ã»ã¹ããŒã¯ã³ãå¶éããããšãã§ããŸãã
ãããè¡ãã«ã¯ãæ°ããRefreshDateãã£ãŒã«ããããŒã¯ã³ã«è¿œå ããŸãïŒããŒã¯ã³ãæŽæ°ããå¿ èŠãããæ¥ä»ãæå®ããå Žåãæå¹æéãããçãããå¿ èŠããããŸãïŒãããŒã¿ããŒã¹ã®ãŠãŒã¶ãŒããŒãã«ã«ã¯MinRefreshDateãšãããã£ãŒã«ãã1ã€ãããããŸããã ãã®ãã£ãŒã«ãã«ã¯ããŠãŒã¶ãŒã«æå¹ãªRefreshDateã®æå°æ¥ä»ãæ ŒçŽããå¿ èŠããããŸãã ããŒã¯ã³ãæŽæ°ããã«ã¯ãMinRefreshDateã空ã§ã¯ãªããæŽæ°ããå¿ èŠã®ããããŒã¯ã³èªäœã®RefreshDateãããåžžã«å°ããå¿ èŠããããŸãã
ãã®å Žåã䜿çšããã»ã¹ã¯æ¬¡ã®ããã«ãªããŸãã
- ä»æ¥ã1789幎1æ1æ¥ã ãšããŸãããã æŽæ°ééã¯3æ¥éã§ãã MinRefreshDateã¯ãŠãŒã¶ãŒã«æå®ãããŠããŸããïŒNULLïŒã
- ãŠãŒã¶ãŒãåããŠãã°ã€ã³/ãã¹ã¯ãŒããæ¿èªãµãŒããŒã«éä¿¡ããå¿çãšããŠãRefreshDate = 01/04/89ã®ã¢ã¯ã»ã¹ããŒã¯ã³ãåä¿¡ããŸãã åæã«ããµãŒããŒã¯MinRefreshDateã空ã§ããããšãèªèãã01/04/89ã«çããããŸãã
- ãŠãŒã¶ãŒã¯ã1æ1ã2ã3æ¥ã«ã¢ã¯ã»ã¹ããŒã¯ã³ã䜿çšããŠããªãœãŒã¹ãµãŒããŒã«ã¢ã¯ã»ã¹ããŸãã
- 管çè ã¯1æ2æ¥ã«ãŠãŒã¶ãŒããŒã«ãå€æŽããŸãã
- 1æ4æ¥ïŒãŸãã¯ãã以éïŒã®æ¬¡ã®ãŠãŒã¶ãŒèŠæ±ã§ããªãœãŒã¹ãµãŒããŒã¯ã¢ã¯ã»ã¹ããŒã¯ã³ãæŽæ°ããå¿ èŠãããããšãèªèããããèªäœãæ¿èªãµãŒããŒã«èŠæ±ããŸãã
- æ¿èªãµãŒããŒã¯ãMinRefreshDateã空ã§ã¯ãªããããŒã¯ã³ã®RefreshDateãããå°ããããšã確èªããçŸåšã®ãŠãŒã¶ãŒæš©éã確èªããŠãRefreshDate = 01/07/89ããã³æ°ãããŠãŒã¶ãŒããŒã«ãæã€æ°ããã¢ã¯ã»ã¹ããŒã¯ã³ãçæããŸãã
- ãªãœãŒã¹ãµãŒããŒã¯ããŠãŒã¶ãŒã«æ°ããã¢ã¯ã»ã¹ããŒã¯ã³ãšãªãœãŒã¹ãæž¡ããŸãã
- ãŠãŒã¶ãŒã¯ãæ°ãã圹å²ã®äžã§1æ4æ¥ãš5æ¥ã«æ°ããã¢ã¯ã»ã¹ããŒã¯ã³ã䜿çšãç¶ããŸãã
- 6æ¥ãã¢ã¯ã»ã¹ããŒã¯ã³ãæ»æè ã«çãŸããŸããã ãã ãããŠãŒã¶ãŒã¯ããã«æ°ä»ããŸãïŒããšãã°ãèªåã®ãããã¡ã€ã«ãéåžžã®IPãŸãã¯ãã©ãŠã¶ãŒããã¢ã¯ã»ã¹ãããªãã£ããšããéç¥ãåãåã£ãå ŽåïŒ
- åãæ¥ã«ããŠãŒã¶ãŒã¯ãããã¡ã€ã«èšå®ãå ¥åããããã¹ãŠã®ã»ãã·ã§ã³ãéããŠçµäºããããªã©ãã¯ãªãã¯ããŸãã ããã«ããããã®ãŠãŒã¶ãŒã®MinRefreshDateããªã»ãããããŸãã
- 7æ¥ã«ãæ»æè ã¯çãŸããããŒã¯ã³ãæŽæ°ããããšããŸãããMinRefreshDate = NULLã§ããããæŽæ°ã§ããŸããã
- 8æ¥ããŠãŒã¶ãŒã¯å床èªèšŒæé ãå®è¡ãããã°ã€ã³/ãã¹ã¯ãŒããéä¿¡ããŸãã åæã«ãRefreshDate = 11.01.89ã®æ°ããããŒã¯ã³ãåãåããŸãã åæã«ããµãŒããŒã¯MinRefreshDateã空ã§ããããšã確èªãã01/11/89ã«çããããŸãïŒãã§ã«æ¥ä»ãå ¥åãããŠããå Žåã¯ãããã§ã¯ãããŸããïŒ
- 9æ¥ãæ»æè ã¯ããŒã¯ã³ïŒRefreshDate = 01/07/89ïŒãå床æŽæ°ããããšããŸãããRefreshDateãMinRefreshDateãããå°ããããæŽæ°ã§ããŸããã
ããããœãªã¥ãŒã·ã§ã³å šäœã§ãã çãŸããããŒã«ãŸãã¯ããŒã¯ã³æŽæ°ããŒã«ã®RefreshDateãçºçãããŸã§ãæéæ ã«é¢é£ããåé¡ããŸã ãããŸãã ãŸãããŠãŒã¶ãŒãããŒã¯ã³ãçãŸããããšã«æ°ä»ããªãå Žåãæ»æè ã¯ããŒã¯ã³ãå®å šã«æŽæ°ãããŠãŒã¶ãŒã«ä»£ãã£ãŠãªãœãŒã¹ã䜿çšããããšãã§ããŸãã ãã ãããããã®åé¡ã¯ãã¹ãŠãæŽæ°æéïŒããšãã°æ倧30åïŒãççž®ããç°åžžãªãŠãŒã¶ãŒã¢ã¯ãã£ããã£ã«å¯Ÿããå¶åŸ¡ã匷åããããšã§éšåçã«è§£æ±ºã§ããŸãã
ãã®ã¢ãããŒãã誰ãã«èå³ãæã¡ãå®éã«é©çšããããšããå¹»æ³ã¯ãããŸããããå®éã®äœ¿çšã«ã©ãã»ã©å®å šã§é©åã§ãããã«ã€ããŠæèŠãèããããšæããŸãã
PSïŒãã¡ãããå®éã®ãããžã§ã¯ãã§ã¯ãSSLãšåæããŒã¯ã³ïŒåœé é²æ¢ããŒã¯ã³ïŒã䜿çšããŠè¿œå ã®ã»ãã¥ãªãã£ãæäŸããå¿ èŠããããŸãã ããã«ãMinRefreshDateã®ä»£ããã«ãäžæã®æåã·ãŒã±ã³ã¹ïŒSessionTokenãªã©ïŒã䜿çšã§ããŸãã ãã ãããã®å ŽåãJWTã¯SessionTokenãã£ãŒã«ããè¿œå ããŠãæ€èšŒã§ããããã«ããå¿ èŠããããŸãã ç¹å®ã®ããŒã¯ã³ãããæè»ã«å¶åŸ¡ããã³å¶éããããã«ãåãŠãŒã¶ãŒã«å¯ŸããŠSessionToken-sã®ã»ããïŒåèªèšŒäžã«äœæãããïŒãä¿åããããšãã§ããŸãã
ããããšã