๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ŒCS/Web

[Web] ์ฟ ํ‚ค์™€ ์„ธ์…˜

by dar0m! 2021. 4. 4.

HTTP ํ”„๋กœํ† ์ฝœ ํŠน์ง•

  • ๋น„์—ฐ๊ฒฐ ์ง€ํ–ฅ(Connectionless)

    ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์— ์‘๋‹ต์„ ํ•˜๊ณ  ์ ‘์†์„ ๋Š๋Š” ํŠน์„ฑ์ด ์žˆ๋‹ค.(HTTP1.1์—์„œ Connectionํ—ค๋”์— keep-alive์„ค์ •ํ•˜๋ฉด ์ปค๋„ฅ์…˜์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.)
  • ์ƒํƒœ์ •๋ณด ์œ ์ง€ ์•ˆ ํ•จ(Stateless)

    HTTP ํ†ต์‹ ์€ ์š”์ฒญ์„ ์‘๋‹ตํ•˜๊ณ  ์ ‘์†์„ ๋Š๊ธฐ ๋•Œ๋ฌธ์— ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ ์ •๋ณด๋ฅผ ์•Œ ์ˆ˜ ์—†๋‹ค.

์ฟ ํ‚ค์™€ ์„ธ์…˜์˜ ํ•„์š”์„ฑ

์ฟ ํ‚ค์™€ ์„ธ์…˜์˜ ํƒ„์ƒ → HTTP ํ”„๋กœํ† ์ฝœ์—์„œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•จ

์œ„์™€ ๊ฐ™์€ HTTP ํ”„๋กœํ† ์ฝœ์˜ ํŠน์ง•์œผ๋กœ ๋ชจ๋“  ์š”์ฒญ๊ฐ„์˜ ์˜์กด๊ด€๊ณ„๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž๋ฅผ ์ธ์ฆํ•  ์ˆ˜ ์—†๋‹ค. ์ด์ „ ์š”์ฒญ๊ณผ ํ˜„์žฌ ์š”์ฒญ์ด ๊ฐ™์€ ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์ธ์ง€ ์•Œ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค. HTTP ํ”„๋กœํ† ์ฝœ์—์„œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ์ˆ ๋กœ ์ฟ ํ‚ค์™€ ์„ธ์…˜์ด ์žˆ๋‹ค.

 

์ฟ ํ‚ค(Cookie)

๊ฐœ๋…

  • ํด๋ผ์ด์–ธํŠธ ๋กœ์ปฌ์— ์ €์žฅ๋˜๋Š” ํ‚ค์™€ ๊ฐ’์ด ๋“ค์–ด์žˆ๋Š” ํŒŒ์ผ์ด๋‹ค.
  • ์ด๋ฆ„, ๊ฐ’, ์œ ํ˜ธ ์‹œ๊ฐ„, ๊ฒฝ๋กœ ๋“ฑ์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ ์ •๋ณด๋ฅผ ๋ธŒ๋ผ์šฐ์ €์— ์ €์žฅํ•˜์—ฌ ์ฐธ์กฐํ•œ๋‹ค.
  • ์ฃผ๋กœ ์„œ๋ฒ„์—์„œ ์ƒ์„ฑํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €์— ์ €์žฅํ•˜๋Š” ๋ฐ์ดํ„ฐ

๊ตฌ์„ฑ ์š”์†Œ

  • ์ฟ ํ‚ค์˜ ์ด๋ฆ„(name)
  • ์ฟ ํ‚ค์˜ ๊ฐ’(value)
  • ์ฟ ํ‚ค์˜ ๋งŒ๋ฃŒ์‹œ๊ฐ„(Expires)
  • ์ฟ ํ‚ค๋ฅผ ์ „์†กํ•  ๋„๋ฉ”์ธ ์ด๋ฆ„(Domain)
  • ์ฟ ํ‚ค๋ฅผ ์ „์†กํ•  ๊ฒฝ๋กœ(Path)
  • ๋ณด์•ˆ ์—ฐ๊ฒฐ ์—ฌ๋ถ€(Secure)
  • HttpOnly ์—ฌ๋ถ€(HttpOnly)

๋™์ž‘๋ฐฉ์‹

์ฟ ํ‚ค ๋™์ž‘์˜ ์˜ˆ

  1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ๋กœ๊ทธ์ธ ์š”์ฒญ์„ ํ•œ๋‹ค.
  2. ์„œ๋ฒ„๋Š” ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ณ  ์‹ถ์€ ๊ฐ’์„ ์ฟ ํ‚ค(cookie)๋กœ ์ƒ์„ฑ
  3. ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ๋กœ๊ทธ์ธ ์š”์ฒญ์˜ ์œ ํšจ์„ฑ์„ ํ™•์ธํ•˜๊ณ  ์‘๋‹ตํ—ค๋”์— 'set-cookie: user=chrisjune'์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์‘๋‹ตํ•œ๋‹ค.
  4. ์ „๋‹ฌ๋ฐ›์€ ์ฟ ํ‚ค๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ๋‹ค๊ฐ€ ๋‹ค์Œ ์š”์ฒญ ๋•Œ ์ฟ ํ‚ค๋ฅผ HTTP ํ—ค๋”์— ๋„ฃ์–ด์„œ ์ „์†ก. 'cookie: user=chrisjune'
  5. ์„œ๋ฒ„์—์„œ๋Š” ์ฟ ํ‚ค ์ •๋ณด๋ฅผ ์ฝ์–ด ์ด์ „ ์ƒํƒœ ์ •๋ณด๋ฅผ ํ™•์ธํ•œ ํ›„ ์‘๋‹ต

์ฟ ํ‚ค ์‚ฌ์šฉ ์˜ˆ

  • ์•„์ด๋””, ๋น„๋ฐ€๋ฒˆํ˜ธ ์ €์žฅ
  • ์‡ผํ•‘๋ชฐ ์žฅ๋ฐ”๊ตฌ๋‹ˆ

์ฟ ํ‚ค ๊ฐ’์€ F12๋ฅผ ๋ˆŒ๋Ÿฌ ๊ฐœ๋ฐœ์ž๋„๊ตฌ์—์„œ ํ™•์ธํ•˜๊ฑฐ๋‚˜ ๊ด€๋ จ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•˜๋ฉด ํ™•์ธ/์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์œ„๋ณ€์กฐ์˜ ์œ„ํ—˜์ด ํ•ญ์ƒ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฟ ํ‚ค๊ฐ’๋„ ์•”ํ˜ธํ™”ํ•ด์•ผ ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

์„ธ์…˜(Session)

๊ฐœ๋…

  • ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ ๊ฐ™์€ ๋ธŒ๋ผ์šฐ์ €๋กœ๋ถ€ํ„ฐ ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์„ ํ•˜๋‚˜์˜ ์ƒํƒœ๋กœ ๋ณด๊ณ  ๊ทธ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค.
  • ์ฆ‰, ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„์— ์ ‘์†ํ•œ ์ดํ›„๋ถ€ํ„ฐ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ข…๋ฃŒํ•  ๋•Œ๊นŒ์ง€ ์œ ์ง€๋˜๋Š” ์ƒํƒœ์ด๋‹ค.
  • ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ข…๋ฃŒ๋˜๊ธฐ ์ „๊นŒ์ง€ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์œ ์ง€ํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๊ธฐ์ˆ 

๋™์ž‘๋ฐฉ์‹

์„ธ์…˜ ๋™์ž‘์˜ ์˜ˆ

  1. ํด๋ผ์ด์–ด๋Šฉ๊ฐ€ ์„œ๋ฒ„์— ๋กœ๊ทธ์ธ ์š”์ฒญ์„ ํ•œ๋‹ค.
  2. ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ๋กœ๊ทธ์ธ ์š”์ฒญ์˜ ์œ ํšจ์„ฑ์„ ํ™•์ธํ•˜๊ณ  uniqueํ•œ id๋ฅผ sessionid๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ €์žฅํ•œ๋‹ค.
  3. ์„œ๋ฒ„๊ฐ€ ์‘๋‹ตํ•  ๋•Œ ์‘๋‹ตํ—ค๋”์— 'set-cookie: sessionid=a1x2fjz'๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์‘๋‹ตํ•œ๋‹ค.
  4. ํด๋ผ์ด์–ธํŠธ๋Š” ์ดํ›„ ์„œ๋ฒ„์— ์š”์ฒญํ•  ๋•Œ ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋‹ซ๊ธฐ๊นŒ์ง€ ์ „๋‹ฌ๋ฐ›์€ ์ฟ ํ‚ค๋ฅผ ์š”์ฒญํ—ค๋”์— 'cookie: sessionid=a1x2fjz'๋ฅผ ๋„ฃ์–ด ์ „์†กํ•œ๋‹ค.
  5. ์„œ๋ฒ„์—์„œ ์š”์ฒญํ—ค๋”์˜ 'sessionid' ๊ฐ’์„ ์ €์žฅ๋œ ์„ธ์…˜์ €์žฅ์†Œ์—์„œ ์ฐพ์•„๋ณด๊ณ  ์œ ํšจํ•œ์ง€ ํ™•์ธ ํ›„ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‘๋‹ตํ•œ๋‹ค.

์„ธ์…˜ ์‚ฌ์šฉ ์˜ˆ

  • ๋กœ๊ทธ์ธ

์„ธ์…˜๋„ ์ฟ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ’์„ ์ฃผ๊ณ  ๋ฐ›์œผ๋ฉฐ ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ ์ •๋ณด๋ฅผ ์œ ์ง€ํ•œ๋‹ค. ์ฆ‰, ์ƒํƒœ ์ •๋ณด๋ฅผ ์œ ์ง€ํ•˜๋Š” ์ˆ˜๋‹จ์€ ์ฟ ํ‚ค์ด๋‹ค.

 

์ฟ ํ‚ค์™€ ์„ธ์…˜์˜ ์ฐจ์ด์ 

๊ตฌ๋ถ„ ์ด๋ฆ„ ๋‚ด์šฉ
์ €์žฅ ์œ„์น˜ ์ฟ ํ‚ค ํด๋ผ์ด์–ธํŠธ
์„ธ์…˜ ์„œ๋ฒ„
๋ณด์•ˆ ์ฟ ํ‚ค ํด๋ผ์ด์–ธํŠธ์— ์ €์žฅ๋˜๋ฏ€๋กœ ๋ณด์•ˆ์— ์ทจ์•ฝ
์„ธ์…˜ ์ฟ ํ‚ค๋ฅผ ์ด์šฉํ•ด Session ID๋งŒ ์ €์žฅํ•˜๊ณ  ์ด ๊ฐ’์œผ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ์„œ๋ฒ„์— ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ ๋น„๊ต์  ๋ณด์•ˆ์„ฑ์ด ์ข‹๋‹ค.
๋ผ์ดํ”„ ์‚ฌ์ดํด ์ฟ ํ‚ค ๋งŒ๋ฃŒ์‹œ๊ฐ„์— ๋”ฐ๋ผ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ข…๋ฃŒํ•ด๋„ ๊ณ„์† ๋‚จ์•„์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.
์„ธ์…˜ ๋งŒ๋ฃŒ์‹œ๊ฐ„์„ ์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ๋งŒ๋ฃŒ์‹œ๊ฐ„์— ์ƒ๊ด€์—†์ด ์‚ญ์ œ๋œ๋‹ค.
์†๋„ ์ฟ ํ‚ค ํด๋ผ์ด์–ธํŠธ์— ์ €์žฅ๋˜์–ด์„œ ์„œ๋ฒ„์— ์š”์ฒญ์‹œ ๋น ๋ฅด๋‹ค.
์„ธ์…˜ ์‹ค์ œ ์ €์žฅ๋œ ์ •๋ณด๊ฐ€ ์„œ๋ฒ„์— ์žˆ์œผ๋ฏ€๋กœ ์„œ๋ฒ„์˜ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•ด ์ฟ ํ‚ค๋ณด๋‹ค ๋Š๋ฆฌ๋‹ค.

 

์ฐธ๊ณ 

 

 

'๐Ÿ“ŒCS > Web' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

XSS(Cross-site Scripting) ๊ณต๊ฒฉ  (0) 2021.04.25
[Web] param vs query vs body  (2) 2021.04.18
[Web] CORS(Cross-Origin Resource Sharing)  (0) 2021.04.18
[Web] HTTP, HTTPS, HTTP ๋ฒ„์ „  (1) 2021.04.08
[Web] REST & RESTful  (0) 2021.04.03

๋Œ“๊ธ€