Skip to content

Latest commit

ย 

History

History
80 lines (47 loc) ยท 3.21 KB

Cookie&Session.md

File metadata and controls

80 lines (47 loc) ยท 3.21 KB

์ฟ ํ‚ค์™€ ์„ธ์…˜

์ฟ ํ‚ค

๐Ÿ’ก ์›น ์„œ๋ฒ„๊ฐ€ ์ƒ์„ฑํ•ด ์›น ๋ธŒ๋ผ์šฐ์ €๋กœ ์ „์†กํ•˜๋Š” ์ž‘์€ ์ •๋ณด ํŒŒ์ผ

๋ฌด์ƒํƒœ์ธ HTTP ํ†ต์‹ ์—์„œ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๊ธฐ์–ตํ•˜๊ณ  ๊ตฌ๋ถ„ํ•˜๋ ค๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉ

ํด๋ผ๊ฐ€ ์„œ๋ฒ„์— ์–ด๋–ค ์š”์ฒญ์„ ๋ณด๋ƒ„ โ†’ ์„œ๋ฒ„๋Š” ํด๋ผ์— ์‘๋‹ต ์‹œ ์ฟ ํ‚ค ์ •๋ณด๋ฅผ ํฌํ•จํ•ด ์‘๋‹ต โ†’ ํด๋ผ๋Š” ์‘๋‹ต๋ฐ›์€ ๊ฐ’์— ์ฟ ํ‚ค๊ฐ€ ์žˆ์œผ๋ฉด ์ž์‹ ์˜ ๊ธฐ์–ต ์žฅ์น˜์— ์ €์žฅ โ†’ ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ ์ €์žฅํ–ˆ๋˜ ์ฟ ํ‚ค๋ฅผ ๋„ฃ์–ด ์ „์†ก โ†’ ์„œ๋ฒ„๋Š” ์š”์ฒญ์— ํฌํ•จ๋œ ์ฟ ํ‚ค ์ •๋ณด๋ฅผ ๋ณด๊ณ  ํด๋ผ์ด์–ธํŠธ ์‹๋ณ„ โ†’ ํด๋ผ์™€ ์ฃผ๊ณ ๋ฐ›์€ ๊ณผ๊ฑฐ ํ†ต์‹  ๋‚ด์—ญ์— ๋Œ€ํ•œ ์ผ๋ถ€ ๋ฐ์ดํ„ฐ ์ €์žฅ

์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์š”์ฒญ์„ ๋ฐ›์•„ ์‘๋‹ต์„ ๋ณด๋‚ผ ๋• Set-Cookie๋ผ๋Š” ํ—ค๋” ์ •๋ณด ์ „์†ก

Set-Cookie: <์ฟ ํ‚ค_์ด๋ฆ„>:<์ฟ ํ‚ค_๊ฐ’>
const app = require('express')();
app.get('/', (req, res) => {
	res.setHeader('Set-Cookie', [username='hihi']);
	res.sendFile(`${_dirname}/index.html`);
});
app.listen(8080, () => console.log('listening on port :8080'));

์ฟ ํ‚ค ์†์„ฑ: ์–ด๋–ค ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ๋ฐ›์€ ์‘๋‹ต ํ—ค๋”์˜ ์ผ๋ถ€์— set-cookie ๊ฐ’์œผ๋กœ ํฌํ•จ๋œ ์ฟ ํ‚ค ์ •๋ณด๋“ค

  • ์ฟ ํ‚ค ๋งŒ๋ฃŒ ์‹œ๊ฐ„ (expries, max-age)

    expires=Wed, 3 Sep 2023 09:00:00 GMT โ†’ ๋‚ ์งœ ๋ช…์‹œ max-age=3600 โ†’ ๊ธฐ๊ฐ„ ๋ช…์‹œ

  • ์ฟ ํ‚ค ๋ฒ”์œ„ (domain, path)

    domain=example.com: example.com ๋„๋ฉ”์ธ๊ณผ ์„œ๋ธŒ ๋„๋ฉ”์ธ์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅ

    path=/mypage โ†’ mypage ๊ฒฝ๋กœ์™€ ๊ทธ ํ•˜์œ„ ๊ฒฝ๋กœ( ex: /mypage/profile )์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅ

  • ์ฟ ํ‚ค ๋ณด์•ˆ (secure)

    ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ์ฟ ํ‚ค๋กœ ์ „๋‹ฌํ•ด์•ผํ•  ๋•Œ secure ์†์„ฑ์œผ๋กœ ์ง€์ • (HTTPS๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋งŒ ์ „์†ก)

  • XSS ๊ณต๊ฒฉ ๋ฐฉ์ง€ (HttpOnly)

    ์ฟ ํ‚ค๋ฅผ ํƒˆ์ทจํ•˜๋Š” ์•…์„ฑ ๊ณต๊ฒฉ ๋ฐฉ๋ฒ•: XSS (์‚ฌ์ดํŠธ ๊ฐ„ ์ŠคํŠธ๋ฆฝํŒ…)

    โ†’ HttpOnly ์†์„ฑ์„ ์‚ฌ์šฉํ•ด ํด๋ผ๊ฐ€ ์ฟ ํ‚ค์— ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•จ

  • CSRF ๊ณต๊ฒฉ ๋ฐฉ์ง€ (samesite)

    ํ•ด์ปค๊ฐ€ ์ฟ ํ‚ค๋ฅผ ์•…์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•: CSRF (์‚ฌ์ดํŠธ ๊ฐ„ ์š”์ฒญ ์œ„์กฐ)

    โ†’ samesite๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ์ด์˜ ์†์„ฑ์ธ strict, lax, none ์ค‘ ํ•˜๋‚˜๋ฅผ ์ง€์ •

    • samesite์˜ ์†์„ฑ

      strict: ๋‹ค๋ฅธ ์‚ฌ์ดํŠธ๋กœ ์ฟ ํ‚ค ์ „์†ก ๊ฐ€๋Šฅ

      lax: ์•ˆ์ „ํ•œ http ๋ฉ”์„œ๋“œ, ์ž‘์—…์ด ์ตœ์ƒ์œ„ ๊ฒฝ๋กœ์—์„œ ์ด๋ค„์ง€๋Š” ๊ฒฝ์šฐ ์ œ์™ธํ•˜๊ณ  ๋ฐ–์˜ ์‚ฌ์ดํŠธ๋กœ ์ฟ ํ‚ค ์ „์†ก ๋ถˆ๊ฐ€

      none: ํƒ€ ์‚ฌ์ดํŠธ๋กœ ์ฟ ํ‚ค ์ „์†ก ๊ฐ€๋Šฅ (์ด ์˜ต์…˜ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋Œ)

์„ธ์…˜

๐Ÿ’ก ์„œ๋ฒ„๊ฐ€ ์ž์‹ ์—๊ฒŒ ์š”์ฒญ์„ ๋ณด๋‚ธ ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•

์ฟ ํ‚ค๋ณด๋‹ค ๋ณด์•ˆ๊ด€์  ๋” ์•ˆ์ „ํ•œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์„ธ์…˜ ์‚ฌ์šฉ

ํด๋ผ๊ฐ€ ์„œ๋ฒ„์— ์–ด๋–ค ์š”์ฒญ์„ ๋ณด๋ƒ„ โ†’ ์„œ๋ฒ„๋Š” ๋ฌด์ž‘์œ„๋กœ ์ƒ์„ฑํ•œ ๊ณ ์œ  ์„ธ์…˜ ID๋ฅผ ์‘๋‹ต ๋ฉ”์‹œ์ง€์˜ Set-Cookie ํ—ค๋” ์ •๋ณด์— ํฌํ•จํ•ด ์ „๋‹ฌ โ†’ ํด๋ผ๋Š” ์š”์ฒญ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ผ ๋•Œ๋งˆ๋‹ค ์‘๋‹ต๋ฐ›์€ ์„ธ์…˜ ID ํฌํ•จํ•ด ๋ณด๋ƒ„ โ†’ ์„œ๋ฒ„๋Š” ํด๋ผ์˜ ์š”์ฒญ ๋ฉ”์‹œ์ง€์— ์žˆ๋Š” ์„ธ์…˜ ID๋ฅผ ๋ณด๊ณ  ์œ ํšจํ•œ์ง€ ํ™•์ธ ํ›„ ์š”์ฒญ ์ฒ˜๋ฆฌ

์›น๋ธŒ๋ผ์šฐ์ €์™€ ๊ฐ™์€ ํด๋ผ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ์ฆ‰์‹œ ์‚ญ์ œ ์ƒˆ๋กœ์šด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด ์„ธ์…˜ ID๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๊ณผ์ • ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์ˆ˜ํ–‰