๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Backend

์‚ฌ์šฉ์ž ์ธ์ฆ ๋ฐฉ์‹ | HTTP ์ฟ ํ‚ค โ–ซ๏ธ Session โ–ซ๏ธ JWT

by Yunny52 2023. 7. 24.

๐Ÿ“Œ ์‚ฌ์šฉ์ž ์ธ์ฆ ๋ฐฉ์‹์— ๋Œ€ํ•˜์—ฌ

 

1. HTTP ์ฟ ํ‚ค

  • ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž์˜ ์ปดํ“จํ„ฐ์— ์ €์žฅ๋˜๋Š” ์ž‘์€ ๊ธฐ๋ก ์ •๋ณด ํŒŒ์ผ
  • ์›น ์‚ฌ์ดํŠธ๋Š” ์ €์žฅ๋œ ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ ์ปดํ“จํ„ฐ์— ๋‚จ๊ฒจ์„œ ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ์žฌ์‚ฌ์šฉํ•œ๋‹ค.
    • ๋ช…์‹œ๋œ ์ง€์† ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ๋ฌดํšจ๊ฐ€ ๋œ๋‹ค.
    • ์ง€์† ์‹œ๊ฐ„์„ ์ „๋‹ฌํ•˜์ง€ ์•Š์œผ๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋‹ซํžˆ๊ธฐ ์ „๊นŒ์ง€ ๊ณ„์† ์œ ํšจํ•˜๋‹ค.
  • ๊ตฌ์กฐ : {์ด๋ฆ„, ๊ฐ’, 0๊ฐœ ์ด์ƒ์˜ ์†์„ฑ} (์†์„ฑ - ๋งŒ๋ฃŒ ๊ธฐ๊ฐ„, ๋„๋ฉ”์ธ, ํ”Œ๋ž˜๊ทธ)
  • ์ผ๋ฐ˜์ ์œผ๋กœ ์›น ์„œ๋ฒ„์— ์˜ํ•ด ์„ค์ •๋˜์ง€๋งŒ ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์— ์˜ํ•ด ์„ค์ • ๊ฐ€๋Šฅํ•˜๋‹ค.
  • Set-Cookie HTTP ํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์ •๋˜๋ฉฐ ์›น ์„œ๋ฒ„์˜ HTTP ์‘๋‹ต์„ ํ†ตํ•ด ์†ก์‹ ๋œ๋‹ค.

 

2. Session

  • ์›น ์‚ฌ์ดํŠธ์˜ ์—ฌ๋Ÿฌ ํŽ˜์ด์ง€์— ๊ฑธ์ณ ์‚ฌ์šฉ๋˜๋Š” ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ์‚ฌ์šฉ์ž๊ฐ€ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋‹ซ์•„ ์„œ๋ฒ„์™€์˜ ์—ฐ๊ฒฐ์„ ๋๋‚ด๋Š” ์‹œ์ ๊นŒ์ง€๋ฅผ ์„ธ์…˜์ด๋ผ๊ณ  ํ•œ๋‹ค.
  • ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ , ์„ธ์…˜์˜ ํ‚ค๊ฐ’๋งŒ์„ ํด๋ผ์ด์–ธํŠธ ์ธก์— ๋‚จ๊ฒจ๋‘”๋‹ค.
  • ๋ธŒ๋ผ์šฐ์ €๋Š” ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ํ‚ค๊ฐ’์„ ์‚ฌ์šฉํ•ด์„œ ์„œ๋ฒ„์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๋ณด์•ˆ์— ์ทจ์•ฝํ•œ ์ฟ ํ‚ค๋ฅผ ๋ณด์™„ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๊ณ  ์žˆ๋‹ค.
  • UUID ์ƒ์„ฑ ๋“ฑ์œผ๋กœ ํ‚ค๊ฐ’์„ ๋žœ๋ค์œผ๋กœ ์ƒ์„ฑํ•ด์„œ ์„ธ์…˜ ์ €์žฅ์†Œ์— ์ €์žฅ ํ›„ ์ฟ ํ‚ค์— ๋‹ด์•„ ์‘๋‹ต์„ ๋ณด๋‚ด๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

3. JWT

  • ์ •๋ณด๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ „์†กํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•˜๋Š” ์„œ๋ช…๋œ ํ† ํฐ์œผ๋กœ์„œ์˜ JSON ๊ฐ์ฒด
  • ์ผ๋ฐ˜์ ์œผ๋กœ ์„œ๋ฒ„์˜ ๋น„๊ณต๊ฐœ ํ‚ค์— ์˜ํ•ด ์„œ๋ช… ๊ฐ€๋Šฅํ•˜๊ณ , ์„œ๋ฒ„๋Š” ํ•ด๋‹น ํ† ํฐ์ด ์œ ํšจํ•œ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ตฌ์กฐ : {ํ—ค๋”, ํŽ˜์ด๋กœ๋“œ, ์„œ๋ช…} - ์ (.)์„ ์‚ฌ์šฉํ•ด ์—ฐ๊ฒฐ๋œ๋‹ค.
  • ํŽ˜์ด๋กœ๋“œ๋Š” ์ผ๋ จ์˜ ๋“ฑ๋ก๋œ ํด๋ ˆ์ž„ ๋˜๋Š” ์‚ฌ์šฉ์ž ์ง€์ • ํด๋ ˆ์ž„์„ ํฌํ•จํ•œ๋‹ค.
  • ํ—ค๋”, ํŽ˜์ด๋กœ๋“œ, ์„œ๋ช…์˜ ๋ฐ์ดํ„ฐ์™€ ์‹œํฌ๋ฆฟ ํ‚ค๋Š” ํ† ํฐ์„ ์ƒ์„ฑํ•œ๋‹ค.
  • ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ ์‹œ JWT๊ฐ€ ๋ฐ˜ํ™˜๋˜๋ฉฐ, ๋กœ์ปฌ์ด๋‚˜ ์„ธ์…˜ ์ €์žฅ์†Œ ๋˜๋Š” ์ฟ ํ‚ค์— ์ €์žฅ๋˜์–ด์•ผ ํ•œ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ๋ณดํ˜ธ๋œ ๋ฃจํŠธ๋‚˜ ์ž์›์— ์ ‘๊ทผํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ ์ผ๋ฐ˜์ ์œผ๋กœ Bearer ์Šคํ‚ค๋งˆ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ Authorization ํ—ค๋” ์•ˆ์— JWT๋ฅผ ๋ณด๋‚ด์•ผ ํ•œ๋‹ค.

 

4. CSRF (์‚ฌ์ดํŠธ ๊ฐ„ ์š”์ฒญ ์œ„์กฐ)

  • ์‚ฌ์šฉ์ž๊ฐ€ ์ž์‹ ์˜ ์˜์ง€์™€๋Š” ๋ฌด๊ด€ํ•˜๊ฒŒ ๊ณต๊ฒฉ์ž๊ฐ€ ์˜๋„ํ•œ ํ–‰์œ„(์ˆ˜์ •, ์‚ญ์ œ, ๋“ฑ๋ก ๋“ฑ)๋ฅผ ์„œ๋ฒ„์— ์š”์ฒญํ•˜๊ฒŒ ํ•˜๋Š” ๊ณต๊ฒฉ์„ ๋งํ•œ๋‹ค.
  • ํŠน์ • ์›น ์„œ๋น„์Šค๊ฐ€ ์‚ฌ์šฉ์ž์˜ ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์‹ ์šฉํ•˜๋Š” ์ƒํƒœ๋ฅผ ๋…ธ๋ฆฐ ๊ฒƒ์œผ๋กœ, ์‚ฌ์šฉ์ž๊ฐ€ ์›น ์„œ๋น„์Šค์— ๋กœ๊ทธ์ธํ•œ ์ƒํƒœ์—์„œ CSRF ๊ณต๊ฒฉ ์ฝ”๋“œ๊ฐ€ ์‚ฝ์ž…๋œ ํŽ˜์ด์ง€๋ฅผ ์—ด๋ฉด, ํ•ด๋‹น ๊ณต๊ฒฉ ๋ช…๋ น์„ ์„œ๋ฒ„๊ฐ€ ์‹ ์šฉํ•˜๊ฒŒ ๋˜์–ด ๊ณต๊ฒฉ์— ๋…ธ์ถœ๋œ๋‹ค.
  • ์„œ๋ฒ„๊ฐ€ ์ฟ ํ‚ค๋ฅผ ํ†ตํ•œ ๋‹จ์ˆœํ•œ ์‚ฌ์šฉ์ž ํ™•์ธ ๊ณผ์ •๋งŒ ๊ฑฐ์นœ๋‹ค๋ฉด ๊ณต๊ฒฉ ํ”ผํ•ด ์œ„ํ—˜์ด ์žˆ๋‹ค.

 

5. XSS (์‚ฌ์ดํŠธ ๊ฐ„ ์Šคํฌ๋ฆฝํŒ…)

  • ์›น ์‚ฌ์ดํŠธ ๊ด€๋ฆฌ์ž๊ฐ€ ์•„๋‹Œ ์‚ฌ๋žŒ์ด ์›น ํŽ˜์ด์ง€์— ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ๋Š” ์ทจ์•ฝ์ ์ด๋‹ค.
  • ์ฃผ๋กœ ์›น ์„œ๋น„์Šค์˜ ๊ฒŒ์‹œํŒ ๋“ฑ์— ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ฒŒ์‹œํ•˜๋Š” ํ˜•ํƒœ๋กœ ๊ณต๊ฒฉ๋œ๋‹ค.
  • ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์ž…๋ ฅ ๋ฐ›์€ ๊ฐ’์„ ์ œ๋Œ€๋กœ ๊ฒ€์‚ฌํ•˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๋‚˜ํƒ€๋‚œ๋‹ค.
  • ํ•ด์ปค๊ฐ€ ์‚ฌ์šฉ์ž์˜ ์ •๋ณด(์ฟ ํ‚ค, ์„ธ์…˜ ๋“ฑ)๋ฅผ ํƒˆ์ทจํ•˜๊ฑฐ๋‚˜, ์ž๋™์œผ๋กœ ๋น„์ •์ƒ์ ์ธ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

 

6. CORS (๊ต์ฐจ ์ถœ์ฒ˜ ์ž์› ๊ณต์œ )

  • ํ•œ ์ถœ์ฒ˜์—์„œ ์‹คํ–‰ ์ค‘์ธ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋‹ค๋ฅธ ์ถœ์ฒ˜์˜ ๋ณดํ˜ธ๋œ ์ž์›์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋„๋ก ๋ธŒ๋ผ์šฐ์ €์— ์•Œ๋ ค์ฃผ๋Š” ์ •์ฑ…
  • ๋ธŒ๋ผ์šฐ์ €์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ์•ˆ์ „ํ•œ ๊ต์ฐจ ์ถœ์ฒ˜ ์š”์ฒญ ๋ฐ ๋ฐ์ดํ„ฐ ์ „์†ก์„ ์ง€์›ํ•œ๋‹ค.
  • CORS๋ฅผ ํ™œ์„ฑํ™”ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ณด์•ˆ ์ƒ์˜ ์ด์œ ๋กœ ์Šคํฌ๋ฆฝํŠธ์—์„œ ์‹œ์ž‘ํ•œ ๊ต์ฐจ ์ถœ์ฒ˜ HTTP ์š”์ฒญ์„ ์ œํ•œํ•œ๋‹ค. (๋™์ผ ์ถœ์ฒ˜ ์ •์ฑ…)

 

7. Redis

  • ํ‚ค-๊ฐ’ ๊ตฌ์กฐ์˜ ๋น„์ •ํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์˜คํ”ˆ ์†Œ์Šค ๊ธฐ๋ฐ˜์˜ ๋น„๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ
  • ๋‹ค์–‘ํ•œ ์ž๋ฃŒ ๊ตฌ์กฐ์˜ ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.
  • ์„œ๋ฒ„์˜ ์ฃผ ๋ฉ”๋ชจ๋ฆฌ์— ์ƒ์ฃผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ๋น ๋ฅด๋‹ค.
  • ์บ์‹ฑ, ์„ธ์…˜ ๊ด€๋ฆฌ, ์‹ค์‹œ๊ฐ„ ์ˆœ์œ„ํ‘œ, ๋Œ€๊ธฐ์—ด, ์ฑ„ํŒ… ๋ฐ ๋ฉ”์‹œ์ง• ๋“ฑ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

'Backend' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Spring Security  (0) 2023.08.07
@MappedSuperclass  (0) 2023.06.30
์›น์†Œ์ผ“๊ณผ ์„œ๋ฒ„์„ผํŠธ  (0) 2023.05.30

๋Œ“๊ธ€