å®å šãªããã³ããšã³ãèªèšŒæ å ±ã¹ãã¬ãŒãžæŠç¥ã解説ããŠã§ãã¢ããªã®ã»ãã¥ãªãã£ã«é¢ãããã¹ããã©ã¯ãã£ã¹ãè匱æ§ãå ç¢ãªãœãªã¥ãŒã·ã§ã³ãåŠã³ãŸãã
ããã³ããšã³ãã®èªèšŒæ å ±ã¹ãã¬ãŒãžïŒèªèšŒããŒã¿ç®¡çã®å æ¬çã¬ã€ã
çŸä»£ã®ãŠã§ãã¢ããªã±ãŒã·ã§ã³éçºã®äžçã§ã¯ãããã³ããšã³ãã§ãŠãŒã¶ãŒã®èªèšŒæ å ±ãå®å šã«ç®¡çããããšãæãéèŠã§ãããã®ã¬ã€ãã§ã¯ãããã³ããšã³ãã®èªèšŒæ å ±ã¹ãã¬ãŒãžã«é¢ããå æ¬çãªæŠèŠãæäŸãããŠãŒã¶ãŒèªèšŒããŒã¿ã®ã»ãã¥ãªãã£ã確ä¿ããããã®ãã¹ããã©ã¯ãã£ã¹ãæœåšçãªè匱æ§ããããŠå ç¢ãªãœãªã¥ãŒã·ã§ã³ã«ã€ããŠè§£èª¬ããŸãã
å®å šãªèªèšŒæ å ±ã¹ãã¬ãŒãžã®éèŠæ§ãçè§£ãã
èªèšŒã¯ãŠã§ãã¢ããªã±ãŒã·ã§ã³ã»ãã¥ãªãã£ã®ç€ã§ãããŠãŒã¶ãŒããã°ã€ã³ãããšããã®èªèšŒæ å ±ïŒéåžžã¯ãŠãŒã¶ãŒåãšãã¹ã¯ãŒãããŸãã¯èªèšŒåŸã«åãåãããŒã¯ã³ïŒã¯ãèªèšŒæžã¿ã»ãã·ã§ã³ãç¶æããããã«ããã³ããšã³ãã§å®å šã«ä¿åãããªããã°ãªããŸãããäžé©åãªä¿åã¯ã以äžã®ãããªæ·±å»ãªã»ãã¥ãªãã£è匱æ§ã«ã€ãªããå¯èœæ§ããããŸãïŒ
- ã¯ãã¹ãµã€ãã¹ã¯ãªããã£ã³ã°ïŒXSSïŒïŒ æ»æè ãããªãã®ãŠã§ããµã€ãã«æªæã®ããã¹ã¯ãªãããæ³šå ¥ããè匱ãªå Žæã«ä¿åãããŠãããŠãŒã¶ãŒã®èªèšŒæ å ±ãçãå¯èœæ§ããããŸãã
- ã¯ãã¹ãµã€ããªã¯ãšã¹ããã©ãŒãžã§ãªïŒCSRFïŒïŒ æ»æè ããŠãŒã¶ãŒãéšããæ¢åã®èªèšŒæžã¿ã»ãã·ã§ã³ãå©çšããŠæå³ããªãã¢ã¯ã·ã§ã³ãå®è¡ãããå¯èœæ§ããããŸãã
- ããŒã¿äŸµå®³ïŒ ããã³ããšã³ãã®ã¹ãã¬ãŒãžã䟵害ããããšãæ©å¯æ§ã®é«ããŠãŒã¶ãŒããŒã¿ãæŒæŽ©ããå人æ å ±ã®çé£ããã®ä»ã®æ·±å»ãªçµæã«ã€ãªããå¯èœæ§ããããŸãã
ãããã£ãŠãé©åãªã¹ãã¬ãŒãžã¡ã«ããºã ãéžæããå ç¢ãªã»ãã¥ãªãã£å¯Ÿçãå®è£ ããããšã¯ããŠãŒã¶ãŒã®ããŒã¿ãä¿è·ãããŠã§ãã¢ããªã±ãŒã·ã§ã³ã®å®å šæ§ãç¶æããããã«äžå¯æ¬ ã§ãã
äžè¬çãªããã³ããšã³ãã¹ãã¬ãŒãžã®éžæè¢ïŒæŠèŠ
ããã³ããšã³ãã§èªèšŒæ å ±ãä¿åããã«ã¯ããã€ãã®éžæè¢ããããããããã«ç¬èªã®ã»ãã¥ãªãã£äžã®æå³åããšå¶éããããŸãïŒ
1. Cookie
Cookieã¯ããŠã§ããµã€ãããŠãŒã¶ãŒã®ã³ã³ãã¥ãŒã¿ã«ä¿åããå°ããªããã¹ããã¡ã€ã«ã§ãããŠãŒã¶ãŒã»ãã·ã§ã³ã®ç¶æããŠãŒã¶ãŒã¢ã¯ãã£ããã£ã®è¿œè·¡ã«äžè¬çã«äœ¿çšãããŸããCookieã¯èªèšŒããŒã¯ã³ãä¿åãã䟿å©ãªæ¹æ³ã§ãããæ£ããå®è£ ãããŠããªããšã»ãã¥ãªãã£è匱æ§ã®åœ±é¿ãåãããããªããŸãã
å©ç¹ïŒ
- ãã¹ãŠã®ãã©ãŠã¶ã§åºããµããŒããããŠããã
- æå¹æéãèšå®ã§ããã
æ¬ ç¹ïŒ
- ä¿å容éãéãããŠããïŒéåžž4KBïŒã
- XSSããã³CSRFæ»æã«å¯ŸããŠè匱ã§ããã
- JavaScriptããã¢ã¯ã»ã¹ã§ãããããæªæã®ããã¹ã¯ãªããã«å¯ŸããŠè匱ã§ããã
- HTTPSçµç±ã§éä¿¡ãããªãå Žåãååãããå¯èœæ§ãããã
Cookieã®ã»ãã¥ãªãã£ã«é¢ããèæ ®äºé ïŒ
- HttpOnlyãã©ã°ïŒ
HttpOnlyãã©ã°ãèšå®ããŠãJavaScriptãCookieã«ã¢ã¯ã»ã¹ã§ããªãããã«ããŸããããã¯XSSæ»æã®ç·©åã«åœ¹ç«ã¡ãŸãã - Secureãã©ã°ïŒ
Secureãã©ã°ãèšå®ããŠãCookieãHTTPSçµç±ã§ã®ã¿éä¿¡ãããããã«ããŸãã - SameSite屿§ïŒ CSRFæ»æãé²ãããã«
SameSite屿§ã䜿çšããŸããæšå¥šãããå€ã¯StrictãŸãã¯Laxã§ãã - çãæå¹æéïŒ Cookieã«èªèšŒæ å ±ãé·æéä¿åããããšã¯é¿ããŠãã ãããçãæå¹æéã䜿çšããæ»æè ã®æ©äŒãå¶éããŸãã
äŸïŒNode.jsãšExpressã§ã»ãã¥ã¢ãªCookieãèšå®ãã
res.cookie('authToken', token, {
httpOnly: true,
secure: true,
sameSite: 'strict',
expires: new Date(Date.now() + 3600000) // 1 hour
});
2. localStorage
localStorageã¯ãæå¹æéãªãã§ãã©ãŠã¶ã«ããŒã¿ãä¿åã§ãããŠã§ãã¹ãã¬ãŒãžAPIã§ããCookieãããå€ãã®ä¿å容éãæäŸããŸãããXSSæ»æã«å¯ŸããŠããè匱ã§ãã
å©ç¹ïŒ
- Cookieãšæ¯èŒããŠä¿å容éã倧ããïŒéåžž5ã10MBïŒã
- ããŒã¿ã¯ãã©ãŠã¶ã»ãã·ã§ã³ããŸããã§æç¶ããã
æ¬ ç¹ïŒ
- JavaScriptããã¢ã¯ã»ã¹ã§ãããããXSSæ»æã«å¯ŸããŠéåžžã«è匱ã§ããã
- èªåçã«æå·åãããªãã
- ããŒã¿ã¯å¹³æã§ä¿åãããããããŠã§ããµã€ãã䟵害ãããå Žåã«çãŸããããã
- åäžãªãªãžã³ããªã·ãŒã®å¯Ÿè±¡ã§ã¯ãªããããåããã¡ã€ã³ã§å®è¡ãããŠããã©ã®ã¹ã¯ãªããããã§ãããŒã¿ã«ã¢ã¯ã»ã¹ã§ããã
localStorageã®ã»ãã¥ãªãã£ã«é¢ããèæ ®äºé ïŒ
èªèšŒããŒã¯ã³ã®ãããªæ©å¯ããŒã¿ãlocalStorageã«ä¿åããªãã§ãã ããããã®åºæã®è匱æ§ã®ãããlocalStorageã¯äžè¬çã«èªèšŒæ
å ±ã®ä¿åã«ã¯æšå¥šãããŸããããã䜿çšããªããã°ãªããªãå Žåã¯ãå
ç¢ãªXSS鲿¢çãå®è£
ããä¿åããåã«ããŒã¿ãæå·åããããšãæ€èšããŠãã ããã
3. sessionStorage
sessionStorageã¯localStorageã«äŒŒãŠããŸãããããŒã¿ã¯ãã©ãŠã¶ã»ãã·ã§ã³ã®éã ãä¿åãããŸãããŠãŒã¶ãŒããã©ãŠã¶ã®ãŠã£ã³ããŠãã¿ããéãããšãããŒã¿ã¯èªåçã«æ¶å»ãããŸãã
å©ç¹ïŒ
- ãã©ãŠã¶ã»ãã·ã§ã³ãçµäºãããšããŒã¿ãæ¶å»ãããã
- Cookieãšæ¯èŒããŠä¿å容éã倧ããã
æ¬ ç¹ïŒ
- JavaScriptããã¢ã¯ã»ã¹ã§ãããããXSSæ»æã«å¯ŸããŠè匱ã§ããã
- èªåçã«æå·åãããªãã
- ããŒã¿ã¯å¹³æã§ä¿åãããã
sessionStorageã®ã»ãã¥ãªãã£ã«é¢ããèæ ®äºé ïŒ
localStorageãšåæ§ã«ãXSSæ»æã«å¯Ÿããè匱æ§ã®ãããsessionStorageã«æ©å¯ããŒã¿ãä¿åããããšã¯é¿ããŠãã ãããã»ãã·ã§ã³çµäºæã«ããŒã¿ã¯æ¶å»ãããŸãããã»ãã·ã§ã³äžã«æ»æè
ãæªæã®ããã¹ã¯ãªãããæ³šå
¥ããå ŽåãããŒã¿ã䟵害ãããå¯èœæ§ããããŸãã
4. IndexedDB
IndexedDBã¯ããã¡ã€ã«ãBLOBãå«ãããã倧éã®æ§é åããŒã¿ãä¿åã§ããããã匷åãªã¯ã©ã€ã¢ã³ããµã€ãã¹ãã¬ãŒãžAPIã§ããlocalStorageãsessionStorageãšæ¯èŒããŠãããŒã¿ç®¡çãšã»ãã¥ãªãã£ã«ãããŠããå€ãã®å¶åŸ¡ãæäŸããŸãã
å©ç¹ïŒ
localStorageãsessionStorageãããä¿å容éã倧ããã- ããŒã¿æŽåæ§ã®ããã®ãã©ã³ã¶ã¯ã·ã§ã³ããµããŒãããã
- å¹ççãªããŒã¿ååŸã®ããã®ã€ã³ããã¯ã¹äœæãå¯èœã
æ¬ ç¹ïŒ
localStorageãsessionStorageãšæ¯èŒããŠäœ¿çšãããè€éã§ããã- äŸç¶ãšããŠJavaScriptããã¢ã¯ã»ã¹å¯èœã§ãããæ éã«å®è£ ããªããšXSSæ»æã«å¯ŸããŠè匱ã§ããã
IndexedDBã®ã»ãã¥ãªãã£ã«é¢ããèæ ®äºé ïŒ
- æå·åïŒ IndexedDBã«ä¿åããåã«æ©å¯ããŒã¿ãæå·åããã
- å ¥åæ€èšŒïŒ ã€ã³ãžã§ã¯ã·ã§ã³æ»æãé²ããããä¿åããåã«ãã¹ãŠã®ããŒã¿ãæ éã«æ€èšŒããã
- ã³ã³ãã³ãã»ãã¥ãªãã£ããªã·ãŒïŒCSPïŒïŒ XSSæ»æãç·©åããããã«åŒ·åãªCSPãå®è£ ããã
5. ã€ã³ã¡ã¢ãªïŒIn-MemoryïŒã¹ãã¬ãŒãž
èªèšŒæ å ±ãã¡ã¢ãªå ã«ã®ã¿ä¿åããããšã¯ãããŒã¿ãã¢ããªã±ãŒã·ã§ã³å®è¡äžã®ã¿å©çšå¯èœã§ãããããçæçãªã»ãã¥ãªãã£ã¬ãã«ãæãé«ããªããŸãããããããã®ã¢ãããŒãã§ã¯ããŒãžãæŽæ°ããããã¢ããªã±ãŒã·ã§ã³ãåèµ·åããããããã³ã«åèªèšŒãå¿ èŠã«ãªããŸãã
å©ç¹ïŒ
- ããŒã¿ãæ°žç¶åãããªããããé·æçãªäŸµå®³ã®ãªã¹ã¯ãäœæžããã
- å®è£ ãç°¡åã§ããã
æ¬ ç¹ïŒ
- ããŒãžãæŽæ°ãããã¢ããªã±ãŒã·ã§ã³ãåèµ·åããããããã³ã«åèªèšŒãå¿ èŠãšãªãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãäœäžããå¯èœæ§ãããã
- ãã©ãŠã¶ãã¯ã©ãã·ã¥ãããããŠãŒã¶ãŒãã¿ããéããããããšããŒã¿ã倱ãããã
ã€ã³ã¡ã¢ãªïŒIn-MemoryïŒã¹ãã¬ãŒãžã®ã»ãã¥ãªãã£ã«é¢ããèæ ®äºé ïŒ
ã€ã³ã¡ã¢ãªïŒIn-MemoryïŒã¹ãã¬ãŒãžã¯æ°žç¶ã¹ãã¬ãŒãžãããæ¬è³ªçã«å®å šã§ãããã¡ã¢ãªç Žæããã®ä»ã®æœåšçãªè匱æ§ããä¿è·ããããšãäŸç¶ãšããŠéèŠã§ããã¡ã¢ãªã«ä¿åããåã«ãã¹ãŠã®ããŒã¿ãé©åã«ãµãã¿ã€ãºããŠãã ããã
6. ãµãŒãããŒãã£ã®ã©ã€ãã©ãªãšãµãŒãã¹
ããã€ãã®ãµãŒãããŒãã£ã®ã©ã€ãã©ãªããµãŒãã¹ã¯ãããã³ããšã³ãã¢ããªã±ãŒã·ã§ã³åãã«å®å šãªèªèšŒæ å ±ã¹ãã¬ãŒãžãœãªã¥ãŒã·ã§ã³ãæäŸããŠããŸãããããã®ãœãªã¥ãŒã·ã§ã³ã¯ãæå·åãããŒã¯ã³ç®¡çãXSS/CSRFä¿è·ãªã©ã®æ©èœãæäŸããããšããããããŸãã
äŸïŒ
- Auth0ïŒ å®å šãªããŒã¯ã³ç®¡çãšèªèšŒæ å ±ã¹ãã¬ãŒãžãæäŸãã人æ°ã®èªèšŒã»èªå¯ãã©ãããã©ãŒã ã
- Firebase AuthenticationïŒ å®å šãªãŠãŒã¶ãŒèªèšŒãšç®¡çãæäŸããã¯ã©ãŠãããŒã¹ã®èªèšŒãµãŒãã¹ã
- AWS AmplifyïŒ èªèšŒã»èªå¯æ©èœãå«ããå®å šã§ã¹ã±ãŒã©ãã«ãªã¢ãã€ã«ããã³ãŠã§ãã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®ãã¬ãŒã ã¯ãŒã¯ã
å©ç¹ïŒ
- å®å šãªèªèšŒæ å ±ã¹ãã¬ãŒãžã®å®è£ ãç°¡çŽ åãããã
- ã»ãã¥ãªãã£è匱æ§ã®ãªã¹ã¯ãäœæžããã
- ããŒã¯ã³ãªãã¬ãã·ã¥ãå€èŠçŽ èªèšŒãªã©ã®æ©èœãå«ãŸããŠããããšãå€ãã
æ¬ ç¹ïŒ
- ãµãŒãããŒãã£ãµãŒãã¹ãžã®äŸåã
- ãµãŒãã¹ã®å©çšã«äŒŽãæœåšçãªã³ã¹ãã
- æ¢åã®èªèšŒã·ã¹ãã ãšã®çµ±åãå¿ èŠã«ãªãå Žåãããã
å®å šãªããã³ããšã³ãèªèšŒæ å ±ã¹ãã¬ãŒãžã®ãã¹ããã©ã¯ãã£ã¹
ã©ã®ã¹ãã¬ãŒãžãªãã·ã§ã³ãéžæãããã«ãããããããŠãŒã¶ãŒã®èªèšŒæ å ±ã®ã»ãã¥ãªãã£ã確ä¿ããããã«ã¯ã以äžã®ãã¹ããã©ã¯ãã£ã¹ã«åŸãããšãäžå¯æ¬ ã§ãïŒ
1. èªèšŒæ å ±ã®ä¿åãæå°éã«æãã
èªèšŒæ å ±ãä¿è·ããæåã®æ¹æ³ã¯ãããã³ããšã³ãã«äžåä¿åããªãããšã§ããããŒã¯ã³ããŒã¹ã®èªèšŒã䜿çšããããšãæ€èšããŠãã ããããã®æ¹æ³ã§ã¯ããµãŒããŒã¯èªèšŒæååŸã«çåœã®ããŒã¯ã³ãçºè¡ããŸããããã³ããšã³ãã¯ããŠãŒã¶ãŒã®å®éã®èªèšŒæ å ±ãä¿åããå¿ èŠãªãããã®ããŒã¯ã³ã䜿çšããŠä¿è·ããããªãœãŒã¹ã«ã¢ã¯ã»ã¹ã§ããŸãã
äŸïŒJSON Web Tokens (JWT)
JWTã¯ãããŒã¯ã³ããŒã¹ã®èªèšŒãå®è£ ããããã®äžè¬çãªæ¹æ³ã§ãããããã¯ããŠãŒã¶ãŒãèªèšŒããããã«å¿ èŠãªãã¹ãŠã®æ å ±ãå«ãèªå·±å®çµåã®ããŒã¯ã³ã§ããJWTã¯ããã®å®å šæ§ãä¿èšŒããæ¹ãããé²ãããã«ããžã¿ã«çœ²åããããšãã§ããŸãã
2. HTTPSã䜿çšãã
ã¯ã©ã€ã¢ã³ããšãµãŒããŒéã®ãã¹ãŠã®éä¿¡ãæå·åããããã«ãåžžã«HTTPSã䜿çšããŠãã ãããããã«ãããæ»æè ãéä¿¡éäžã§èªèšŒæ å ±ãååããã®ãé²ããŸãã
3. ã³ã³ãã³ãã»ãã¥ãªãã£ããªã·ãŒïŒCSPïŒãå®è£ ãã
CSPã¯ããã©ãŠã¶ãããŒããèš±å¯ãããªãœãŒã¹ãå¶åŸ¡ã§ããã»ãã¥ãªãã£ã¡ã«ããºã ã§ããCSPãæ éã«èšå®ããããšã§ãXSSæ»æããã®ä»ã®çš®é¡ã®æªæã®ããã³ãŒãã®æ³šå ¥ãé²ãããšãã§ããŸãã
CSPããããŒã®äŸïŒ
Content-Security-Policy: default-src 'self'; script-src 'self' https://example.com; style-src 'self' https://example.com; img-src 'self' data:;
4. å ¥åããŒã¿ããµãã¿ã€ãºãã
ããã³ããšã³ãã«ä¿åããåã«ããã¹ãŠã®ãŠãŒã¶ãŒå ¥åããŒã¿ãåžžã«ãµãã¿ã€ãºããŠãã ãããããã¯ãã€ã³ãžã§ã¯ã·ã§ã³æ»æããã®ä»ã®çš®é¡ã®æªæã®ããã³ãŒãã®å®è¡ãé²ãã®ã«åœ¹ç«ã¡ãŸãã
5. 匷åãªæå·ã©ã€ãã©ãªã䜿çšãã
ããã³ããšã³ãã§ããŒã¿ãæå·åããå¿ èŠãããå Žåã¯ãååã«æ€èšŒãããç¶æãããŠãã匷åãªæå·ã©ã€ãã©ãªã䜿çšããŠãã ãããç¬èªã®æå·åã¢ã«ãŽãªãºã ã¯æ»æã«å¯ŸããŠè匱ã§ããããšãå€ãããã䜿çšãé¿ããŠãã ããã
6. äŸåé¢ä¿ã宿çã«æŽæ°ãã
ã»ãã¥ãªãã£è匱æ§ãä¿®æ£ããããã«ãããã³ããšã³ãã®ã©ã€ãã©ãªããã¬ãŒã ã¯ãŒã¯ãææ°ã®ç¶æ ã«ä¿ã£ãŠãã ããã宿çã«æŽæ°ã確èªããã§ããã ãæ©ãé©çšããŠãã ããã
7. å€èŠçŽ èªèšŒïŒMFAïŒãå®è£ ãã
MFAã¯ããŠãŒã¶ãŒã«2ã€ä»¥äžã®èªèšŒèŠçŽ ã®æäŸãèŠæ±ããããšã§ãã»ãã¥ãªãã£ã®å±€ã远å ããŸããããã«ãããæ»æè ããŠãŒã¶ãŒã®ãã¹ã¯ãŒããçãã ãšããŠãããŠãŒã¶ãŒã¢ã«ãŠã³ãã䟵害ããããšãã¯ããã«å°é£ã«ãªããŸãã
8. ã¢ããªã±ãŒã·ã§ã³ã®ã»ãã¥ãªãã£è匱æ§ãç£èŠãã
èªååããŒã«ãæåã®ã³ãŒãã¬ãã¥ãŒã䜿çšããŠã宿çã«ã¢ããªã±ãŒã·ã§ã³ã®ã»ãã¥ãªãã£è匱æ§ãã¹ãã£ã³ããŠãã ãããããã«ãããæ»æè ã«æªçšãããåã«æœåšçãªã»ãã¥ãªãã£åé¡ãç¹å®ããä¿®æ£ããããšãã§ããŸãã
äžè¬çãªããã³ããšã³ãã®ã»ãã¥ãªãã£è匱æ§ã®ç·©å
ãããã®è匱æ§ã«å¯ŸåŠããããšã¯ãå®å šãªããã³ããšã³ãèªèšŒæ å ±ã¹ãã¬ãŒãžæŠç¥ã«ãšã£ãŠäžå¯æ¬ ã§ãïŒ
1. ã¯ãã¹ãµã€ãã¹ã¯ãªããã£ã³ã°ïŒXSSïŒã®é²æ¢
- å ¥åã®ãµãã¿ã€ãºïŒ æªæã®ããã¹ã¯ãªããã®æ³šå ¥ãé²ããããåžžã«ãŠãŒã¶ãŒå ¥åããµãã¿ã€ãºããã
- åºåã®ãšã³ã³ãŒãã£ã³ã°ïŒ æ³šå ¥ãããã¹ã¯ãªããã®å®è¡ãé²ãããããã©ãŠã¶ã§ã¬ã³ããªã³ã°ããåã«ããŒã¿ããšã³ã³ãŒãããã
- ã³ã³ãã³ãã»ãã¥ãªãã£ããªã·ãŒïŒCSPïŒïŒ ãã©ãŠã¶ãããŒããèš±å¯ãããªãœãŒã¹ãå¶åŸ¡ããããã«ã峿 ŒãªCSPãå®è£ ããã
2. ã¯ãã¹ãµã€ããªã¯ãšã¹ããã©ãŒãžã§ãªïŒCSRFïŒã®ä¿è·
- ã·ã³ã¯ããã€ã¶ãŒããŒã¯ã³ãã¿ãŒã³ïŒ åãªã¯ãšã¹ãã«äžæã§äºæž¬äžå¯èœãªããŒã¯ã³ã䜿çšããŠããªã¯ãšã¹ããããªãã®ãŠã§ããµã€ãããçºä¿¡ãããããšã確èªããã
- SameSite Cookie屿§ïŒ ã¯ãã¹ãµã€ããªã¯ãšã¹ãã§Cookieãéä¿¡ãããã®ãé²ãããã«
SameSite屿§ã䜿çšããã - ããã«ãµããããCookieïŒ ã©ã³ãã ãªå€ãæã€Cookieãèšå®ããåãå€ãé ããã©ãŒã ãã£ãŒã«ãã«å«ããããµãŒããŒã§Cookieã®å€ãšãã©ãŒã ãã£ãŒã«ãã®å€ãäžèŽããããšã確èªããã
3. ããŒã¯ã³çé£ã®é²æ¢
- çåœã®ããŒã¯ã³ïŒ çåœã®ããŒã¯ã³ã䜿çšããŠãæ»æè ãçãŸããããŒã¯ã³ã䜿çšããæ©äŒãå¶éããã
- ããŒã¯ã³ã®ããŒããŒã·ã§ã³ïŒ ããŒã¯ã³ã®ããŒããŒã·ã§ã³ãå®è£ ããŠã宿çã«æ°ããããŒã¯ã³ãçºè¡ããå€ããã®ãç¡å¹åããã
- å®å
šãªã¹ãã¬ãŒãžïŒ ããŒã¯ã³ã
HttpOnlyCookieãªã©ã®å®å šãªå Žæã«ä¿åããã
4. äžéè ïŒMitMïŒæ»æã®é²æ¢
- HTTPSïŒ ã¯ã©ã€ã¢ã³ããšãµãŒããŒéã®ãã¹ãŠã®éä¿¡ãæå·åããããã«åžžã«HTTPSã䜿çšããã
- HTTP Strict Transport Security (HSTS)ïŒ HSTSãå®è£ ããŠããã©ãŠã¶ãããªãã®ãŠã§ããµã€ãã«æ¥ç¶ããéã«åžžã«HTTPSã䜿çšããããã«åŒ·å¶ããã
- èšŒææžãã³ãã³ã°ïŒ æ»æè ãåœã®èšŒææžã䜿çšããŠãã©ãã£ãã¯ãååããã®ãé²ãããã«ããµãŒããŒã®èšŒææžããã³ãã³ã°ããã
代æ¿ã®èªèšŒæ¹æ³
æã«ã¯ãæåã®ã¢ãããŒãã¯ããã³ããšã³ãã«çŽæ¥èªèšŒæ å ±ãä¿åããªãããšã§ãããããã®ä»£æ¿èªèšŒæ¹æ³ãæ€èšããŠãã ããïŒ
1. OAuth 2.0
OAuth 2.0ã¯ããŠãŒã¶ãŒãèªåã®èªèšŒæ å ±ãå ±æããããšãªãããµãŒãããŒãã£ã¢ããªã±ãŒã·ã§ã³ã«ãªãœãŒã¹ãžã®ã¢ã¯ã»ã¹ãèš±å¯ããããã®èªå¯ãã¬ãŒã ã¯ãŒã¯ã§ãããGoogleã§ãã°ã€ã³ãããFacebookã§ãã°ã€ã³ãæ©èœã§äžè¬çã«äœ¿çšãããŸãã
å©ç¹ïŒ
- ãŠãŒã¶ãŒã¯ããªãã®ãŠã§ããµã€ãã§æ°ããã¢ã«ãŠã³ããäœæããå¿ èŠããªãã
- ãŠãŒã¶ãŒã¯ããªãã®ãŠã§ããµã€ããšèªèšŒæ å ±ãå ±æããå¿ èŠããªãã
- ãŠãŒã¶ãŒãªãœãŒã¹ãžã®ã¢ã¯ã»ã¹ãèš±å¯ããããã®å®å šã§æšæºåãããæ¹æ³ãæäŸããã
2. ãã¹ã¯ãŒãã¬ã¹èªèšŒ
ãã¹ã¯ãŒãã¬ã¹èªèšŒæ¹æ³ã¯ããŠãŒã¶ãŒããã¹ã¯ãŒããèŠããå¿ èŠæ§ããªãããŸããããã¯ã次ã®ãããªæ¹æ³ã§å®çŸã§ããŸãïŒ
- Eã¡ãŒã«ããžãã¯ãªã³ã¯ïŒ ãŠãŒã¶ãŒã®ã¡ãŒã«ã¢ãã¬ã¹ã«äžæã®ãªã³ã¯ãéä¿¡ãããããã¯ãªãã¯ããŠãã°ã€ã³ã§ããããã«ããã
- SMSã¯ã³ã¿ã€ã ãã¹ã³ãŒãïŒ ãŠãŒã¶ãŒã®é»è©±çªå·ã«ã¯ã³ã¿ã€ã ãã¹ã³ãŒããéä¿¡ãããããå ¥åããŠãã°ã€ã³ã§ããããã«ããã
- WebAuthnïŒ ããŒããŠã§ã¢ã»ãã¥ãªãã£ããŒãçäœèªèšŒã䜿çšããŠãŠãŒã¶ãŒã®èº«å ã確èªããã
å©ç¹ïŒ
- ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®åäžã
- ãã¹ã¯ãŒãé¢é£ã®ã»ãã¥ãªãã£è匱æ§ã®ãªã¹ã¯äœæžã
宿çãªç£æ»ãšæŽæ°
ã»ãã¥ãªãã£ã¯äžåºŠããã®ä¿®æ£ã§ã¯ãªããç¶ç¶çãªããã»ã¹ã§ãã宿çã«ããã³ããšã³ãã®ã³ãŒããšäŸåé¢ä¿ãã»ãã¥ãªãã£è匱æ§ã«ã€ããŠç£æ»ããŠãã ãããææ°ã®ã»ãã¥ãªãã£ãã¹ããã©ã¯ãã£ã¹ãåžžã«ææ¡ãããããã¢ããªã±ãŒã·ã§ã³ã«é©çšããŠãã ãããã»ãã¥ãªãã£å°éå®¶ã«ãããããã¬ãŒã·ã§ã³ãã¹ãã¯ãããªããèŠéãããããããªãè匱æ§ãçºèŠããããšãã§ããŸãã
çµè«
å®å šãªããã³ããšã³ãèªèšŒæ å ±ã¹ãã¬ãŒãžã¯ããŠã§ãã¢ããªã±ãŒã·ã§ã³ã»ãã¥ãªãã£ã®éèŠãªåŽé¢ã§ããããŸããŸãªã¹ãã¬ãŒãžãªãã·ã§ã³ãæœåšçãªè匱æ§ãããã³ãã¹ããã©ã¯ãã£ã¹ãçè§£ããããšã§ããŠãŒã¶ãŒã®ããŒã¿ãä¿è·ããã¢ããªã±ãŒã·ã§ã³ã®å®å šæ§ãç¶æããå ç¢ãªã»ãã¥ãªãã£æŠç¥ãå®è£ ã§ããŸããéçºããã»ã¹ã®ãã¹ãŠã®æ®µéã§ã»ãã¥ãªãã£ãåªå ããé²åããè åšã«å ãããããã«ã»ãã¥ãªãã£å¯Ÿçã宿çã«èŠçŽããæŽæ°ããŠãã ãããä»äºã«é©ããããŒã«ãéžæããããšãå¿ããªãã§ãã ãããé©åãªèšå®ããããCookieã蚱容ç¯å²å ã§ãããJWTã䜿çšããããŒã¯ã³ããŒã¹ã®èªèšŒãã確ç«ããããµãŒãããŒãã£ã®èªèšŒãããã€ããŒã«äŸåãããœãªã¥ãŒã·ã§ã³ãªã©ãããã°ãã°åªããã¢ãããŒãã§ããã¢ããªã±ãŒã·ã§ã³ãé²åããæ°ããæè¡ãç»å Žããã«ã€ããŠãéžæè¢ãåè©äŸ¡ããããšãæããªãã§ãã ããã