[Network] ์ฟ ํ‚ค (Cookie)

hiยท2022๋…„ 8์›” 30์ผ
0

๐Ÿ’ก HTTP๋Š” ๋ฌด์ƒํƒœ (Stateless) ํ”„๋กœํ† ์ฝœ

  • ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์ฃผ๊ณ  ๋ฐ›์œผ๋ฉด ์—ฐ๊ฒฐ์ด ๋Š์–ด์ง
  • ์žฌ ์š”์ฒญ์‹œ ์„œ๋ฒ„๋Š” ์ด์ „ ์š”์ฒญ์„ ๊ธฐ์–ตํ•˜์ง€ ๋ชป ํ•จ
  • ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๋Š” ์„œ๋กœ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜์ง€ ์•Š์Œ

์ด๊ฒƒ์„ ์ฟ ํ‚ค๋กœ ๋ณด์™„


๐Ÿช ์ฟ ํ‚ค๋ž€ ...

๋‚ด๊ฐ€ ๋งŒ๋“  ์ฟ ํ‚ค~ .. ๋„ˆ๋ฅผ ์œ„ํ•ด ๊ตฌ์› ์ง€ ..

  • ์„œ๋ฒ„๊ฐ€ ์‚ฌ์šฉ์ž์˜ ์›น ๋ธŒ๋ผ์šฐ์ €์— ์ „์†กํ•˜๋Š” ์ž‘์€ ๋ฐ์ดํ„ฐ ์กฐ๊ฐ
  • ๋ธŒ๋ผ์šฐ์ €๋Š” ๊ทธ ๋ฐ์ดํ„ฐ ์กฐ๊ฐ๋“ค์„ ์ €์žฅํ•ด ๋†“์•˜๋‹ค๊ฐ€, ๋™์ผํ•œ ์„œ๋ฒ„์— ์žฌ ์š”์ฒญ ์‹œ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ•จ๊ป˜ ์ „์†ก
  • ๋ชจ๋“  ์š”์ฒญ์— ์ฟ ํ‚ค ์ •๋ณด ์ž๋™ ํฌํ•จ

  • ์‚ฌ์šฉ์ฒ˜

    • ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ ์„ธ์…˜ ๊ด€๋ฆฌ
    • ๊ด‘๊ณ  ์ •๋ณด ํŠธ๋ž˜ํ‚น
  • ์ฟ ํ‚ค ์ •๋ณด๋Š” ํ•ญ์ƒ ์„œ๋ฒ„์— ์ „์†ก๋จ

    • ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ ์ถ”๊ฐ€ ์œ ๋ฐœ
    • ์ตœ์†Œํ•œ์˜ ์ •๋ณด๋งŒ ์‚ฌ์šฉ (์„ธ์…˜ id, ์ธ์ฆ ํ† ํฐ)
    • ์„œ๋ฒ„์— ์ „์†กํ•˜์ง€ ์•Š๊ณ , ์›น ๋ธŒ๋ผ์šฐ์ € ๋‚ด๋ถ€์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์‹ถ์œผ๋ฉด ์›น ์Šคํ† ๋ฆฌ์ง€ (localStorage, sessionStorage) ์ฐธ๊ณ 
  • ์ฃผ์˜
    - ๋ณด์•ˆ์— ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋Š” ์ €์žฅํ•˜๋ฉด ์•ˆ ๋จ (์ฃผ๋ฏผ๋ฒˆํ˜ธ, ์‹ ์šฉ์นด๋“œ ๋ฒˆํ˜ธ ๋“ฑ)


  • Set-Cookie

    • ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ ์ฟ ํ‚ค ์ „๋‹ฌ (์‘๋‹ต)
  • Cookie

    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—์„œ ๋ฐ›์€ ์ฟ ํ‚ค๋ฅผ ์ €์žฅํ•˜๊ณ , HTTP ์š”์ฒญ์‹œ ์„œ๋ฒ„๋กœ ์ „๋‹ฌ

  1. ๋กœ๊ทธ์ธ

  2. ๋กœ๊ทธ์ธ ์ดํ›„ ์ ‘๊ทผ

set-cookie: sessionId=abcde1234; 
			expires=Sat, 26-Dec-2022 00:00:00 GMT; 
            Path=/; 
            domain=.google.com; 
            Secure

1) ์ƒ๋ช…์ฃผ๊ธฐ

set-cookie: expires=Sat, 26-Dec-2022 00:00:00 GMT
set-cookie: max-age=3600 (3600์ดˆ)
  • expires : ๋งŒ๋ฃŒ์ผ์ด ๋˜๋ฉด ์ฟ ํ‚ค ์‚ญ์ œ
  • max-age : 0์ด๋‚˜ ์Œ์ˆ˜๋ฅผ ์ง€์ •ํ•˜๋ฉด ์ฟ ํ‚ค ์‚ญ์ œ

2) ์ข…๋ฅ˜

  • ์„ธ์…˜ ์ฟ ํ‚ค : ๋งŒ๋ฃŒ ๋‚ ์งœ ์ƒ๋žต ๐Ÿ‘‰ ๋ธŒ๋ผ์šฐ์ € ์ข…๋ฃŒ์‹œ๊นŒ์ง€๋งŒ ์œ ์ง€
  • ์˜์† ์ฟ ํ‚ค : ๋งŒ๋ฃŒ ๋‚ ์งœ ์ž…๋ ฅ ๐Ÿ‘‰ ํ•ด๋‹น ๋‚ ์งœ๊นŒ์ง€ ์œ ์ง€

3) ๋„๋ฉ”์ธ (Domain)

domain=example.org
  • ๋ช…์‹œ

    • ๋ช…์‹œํ•œ ๋ฌธ์„œ ๊ธฐ์ค€ ๋„๋ฉ”์ธ + ์„œ๋ธŒ ๋„๋ฉ”์ธ ํฌํ•จ
    • domain=example.org ์ง€์ •ํ•˜์—ฌ ์ฟ ํ‚ค ์ƒ์„ฑ์‹œ
      ๐Ÿ‘‰ example.org + dev.example.org ์ฟ ํ‚ค ์ ‘๊ทผ
  • ์ƒ๋žต

    • ํ˜„์žฌ ๋ฌธ์„œ ๊ธฐ์ค€ ๋„๋ฉ”์ธ๋งŒ ์ ์šฉ
    • example.org ์—์„œ ์ฟ ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ง€์ • ์ƒ๋žต์‹œ
      ๐Ÿ‘‰ example.org๋งŒ ์ฟ ํ‚ค ์ ‘๊ทผ,
      dev.example.org๋Š” ์ฟ ํ‚ค ๋ฏธ์ ‘๊ทผ

4) ๊ฒฝ๋กœ (Path)

๋„๋ฉ”์ธ์œผ๋กœ 1์ฐจ ํ•„ํ„ฐ๋ง => ๊ฒฝ๋กœ๋กœ ์ถ”๊ฐ€ ํ•„ํ„ฐ๋ง

  • ๊ฒฝ๋กœ๋ฅผ ํฌํ•จํ•œ ํ•˜์œ„ ๊ฒฝ๋กœ ํŽ˜์ด์ง€๋งŒ ์ฟ ํ‚ค ์ ‘๊ทผ
  • ์ผ๋ฐ˜์ ์œผ๋กœ path=/ ๋ฃจํŠธ๋กœ ์ง€์ •
ex) path=/home ์ง€์ •์‹œ

	/home
    /home/lever1
    /home/lever1/level2  ๐Ÿ‘‰ ๊ฐ€๋Šฅ
    
    /hello ๐Ÿ‘‰ ๋ถˆ๊ฐ€๋Šฅ 

5) ๋ณด์•ˆ

  • Secure

    • ์ฟ ํ‚ค๋Š” http, https ๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๊ณ  ์ „์†ก
    • Secure๋ฅผ ์ ์šฉํ•˜๋ฉด https์ธ ๊ฒฝ์šฐ์—๋งŒ ์ „์†ก
  • HttpOnly

    • XSS ๊ณต๊ฒฉ ๋ฐฉ์ง€
    • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์ ‘๊ทผ ๋ถˆ๊ฐ€ (document.cookie)
    • HTTP ์ „์†ก์—๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • SameSite

    • XSRF ๊ณต๊ฒฉ ๋ฐฉ์ง€
    • ์š”์ฒญ ๋„๋ฉ”์ธ๊ณผ ์ฟ ํ‚ค์— ์„ค์ •๋œ ๋„๋ฉ”์ธ์ด ๊ฐ™์€ ๊ฒฝ์šฐ๋งŒ ์ฟ ํ‚ค ์ „์†ก

0๊ฐœ์˜ ๋Œ“๊ธ€