ãå³è§£ã§æ¯èŒãCookie vs ã»ãã·ã§ã³ â WebèªèšŒã®ä»çµã¿ã培åºè§£èª¬
ãã°ã€ã³ããããšãããŒãžãç§»åããŠãããã°ã€ã³äžãã®ãŸãŸãªã®ã¯ãªãã§ïŒæ¯åãã¹ã¯ãŒãå ¥ããªããŠããã®ãäžæè°ãªãã ãã©âŠ
ããçåã ããå®ã¯HTTPã£ãŠããéä¿¡ã®ä»çµã¿ã¯ãã¹ããŒãã¬ã¹ããšãã£ãŠã1åã®ããåãããšã«çžæã®ããšãå¿ãã¡ãããã ãã ãããã°ã€ã³ç¶æ ãèŠããŠããããã«ãCookieãããã»ãã·ã§ã³ããšããä»çµã¿ãå¿ èŠã«ãªããã ã
Cookieã£ãŠååã¯ããèããã©ãå ·äœçã«ã¯ã©ããããã®ãªã®ïŒ
Cookieã¯ãã©ãŠã¶åŽã«ä¿åãããå°ããªããã¹ãããŒã¿ã ãããµãŒããŒãããã®æ å ±ãèŠããŠãããŠããšãã©ãŠã¶ã«æž¡ããŠã次ã®ãªã¯ãšã¹ãã®ãšãã«ãã©ãŠã¶ãèªåçã«ãã®æ å ±ããµãŒããŒã«éãè¿ãä»çµã¿ãªãã ãã·ã§ããã³ã°ãµã€ãã®ã«ãŒãæ å ±ãèšèªèšå®ãªãããCookieã§ç®¡çãããŠããããšãå€ãã
ãããã»ãã·ã§ã³ã¯ã©ãéãã®ïŒ
ã»ãã·ã§ã³ã¯ãŠãŒã¶ãŒã®æ å ±ããµãŒããŒåŽã«ä¿åããä»çµã¿ã ãããµãŒããŒããã»ãã·ã§ã³IDããšããçãèå¥åã ããCookieã«å ¥ããŠãã©ãŠã¶ã«æž¡ããã ããã©ãŠã¶ã¯ãã®IDã ããéãè¿ããŠããµãŒããŒãIDãããšã«ãããããã®äººã¯ãã£ããã°ã€ã³ããå±±ç°ããã ãªããšããŒã¿ãåŒãåºãæµãã ã
ãªãã»ã©ãCookieã¯ããã©ãŠã¶ã«æ å ±ãé ããããã»ãã·ã§ã³ã¯ããµãŒããŒã«æ å ±ãé ããŠIDã ãæž¡ããã£ãŠããšã ãïŒã¡ãªã¿ã«Cookieã«ãçš®é¡ãããã£ãŠèãããã ãã©âŠ
倧ããåããŠ2çš®é¡ãããããã©ãŠã¶ãéãããšæ¶ãããã»ãã·ã§ã³Cookieããšãæå¹æéãæå®ããŠé·æéæ®ããæ°žç¶Cookieãã ãããã°ã€ã³ç¶æ ã1é±éä¿æãããæ¬¡åããèªåãã°ã€ã³ãã¿ãããªæ©èœã¯æ°žç¶Cookieã䜿ã£ãŠããããšãå€ãã
Cookieã«çŽæ¥ãã¹ã¯ãŒããšãå ¥ãã¡ãã£ããå±ãªããªãïŒã»ãã¥ãªãã£å¯Ÿçã£ãŠã©ããªã£ãŠãã®ïŒ
ãŸãã«ãããéèŠãªãã€ã³ãã ãããŸãCookieã«ã¯ãHttpOnlyããšãã屿§ããã£ãŠããããã€ãããšJavaScriptããCookieãèªããªããªãããXSSæ»æãžã®å¯Ÿçã«ãªãããSecureã屿§ãã€ãããšHTTPSéä¿¡ã®ãšãã ãCookieãéãããããã«ãªãããããã«ãSameSiteã屿§ã§ãå¥ã®ãµã€ãããã®ãªã¯ãšã¹ãã«Cookieãä»ããªãããå¶éã§ãããã
æè¿ã¯JWTã£ãŠããä»çµã¿ãããã£ãŠèãããã©ãã»ãã·ã§ã³ãšã¯äœãéãã®ïŒ
JWTã¯JSON Web Tokenã®ç¥ã§ããŠãŒã¶ãŒæ å ±ãããŒã¯ã³ãšããæååã«æå·åããŠåãèŸŒãæ¹åŒã ããã»ãã·ã§ã³ãšéã£ãŠãµãŒããŒåŽã«ããŒã¿ãä¿åããªããŠããã®ã倧ããªç¹åŸŽã ããããŒã¯ã³èªäœã«ã誰ããã€ãã°ã€ã³ããããšããæ å ±ãå ¥ã£ãŠããŠã眲åã§æ¹ãããæ€ç¥ã§ããä»çµã¿ãªãã ããã€ã¯ããµãŒãã¹ãSPAã®ãããªã¢ãã³ãªã¢ãŒããã¯ãã£ã§ã¯JWTãäž»æµã«ãªã£ãŠããŠããã
OAuthã§Googleãã°ã€ã³ãšããããšãããè£ã§ã¯CookieãããŒã¯ã³ã䜿ãããŠãã®ïŒ
ãã®éããOAuthã§ã¯èªå¯ã³ãŒããåãåã£ãããšããµãŒããŒãã¢ã¯ã»ã¹ããŒã¯ã³ãååŸããŠããããããšã«ã»ãã·ã§ã³ãJWTãçºè¡ãããã ãã€ãŸãOAuthã¯ãã°ã€ã³ã®å ¥å£ã®ä»çµã¿ã§ããã°ã€ã³ç¶æ ã®ç¶æã«ã¯ãã£ã±ãCookieãããŒã¯ã³ãå¿ èŠã«ãªããã ã
ã»ãã¥ãªãã£ã®è©±ã§ãã»ãã·ã§ã³åºå®æ»æããšããCSRFãã£ãŠèããããšããããã ãã©ãã©ãããæ»æãªã®ïŒ
ã»ãã·ã§ã³åºå®æ»æã¯ãæ»æè ãçšæããã»ãã·ã§ã³IDãã¿ãŒã²ããã«äœ¿ãããŠããã°ã€ã³åŸã«ãã®IDã§ãªãããŸãæå£ã ãã察çã¯ãã°ã€ã³æåæã«ã»ãã·ã§ã³IDãå¿ ãåçºè¡ããããšãCSRFã¯Cross-Site Request Forgeryã®ç¥ã§ããã°ã€ã³äžã®ãŠãŒã¶ãŒã«æå³ããªããªã¯ãšã¹ããéãããæ»æã ããSameSite屿§ãCSRFããŒã¯ã³ã§é²ãã®ãå®çªã ã
JWTã ãšããŒã¯ã³ãæŒãããçµããã£ãŠèããã©ããã®ãžãã®å¯Ÿçã¯ã©ãããŠãã®ïŒ
ãããšããã«æ°ã¥ããããJWTã¯æå¹æéãçãããŠãããšãã°15åã§åããã¢ã¯ã»ã¹ããŒã¯ã³ãšãæ°æ¥éæå¹ãªãªãã¬ãã·ã¥ããŒã¯ã³ãçµã¿åãããã®ãäžè¬çã ããã¢ã¯ã»ã¹ããŒã¯ã³ãæŒããŠã被害ãæå°éã«æãããããããªãã¬ãã·ã¥ããŒã¯ã³ã¯HttpOnlyã®Cookieã«ä¿åããŠJavaScriptããè§Šããªãããã«ãããäžãäžã®ããã«ãµãŒããŒåŽã§ãªãã¬ãã·ã¥ããŒã¯ã³ãç¡å¹åã§ããä»çµã¿ãå ¥ããŠãããšå®å¿ã ã