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

CSRF์™€ XSS

by bamDal 2025. 2. 26.

์˜ˆ์ „์— ๋ฐœํ‘œ ์ž๋ฃŒ๋กœ ๋งŒ๋“ค์—ˆ๋˜ ๊ฒƒ ๋ณต์Šต ๊ฒธ ์ž‘์„ฑ

 

CSRF   

CSRF์˜ ์ •์˜

Cross-Site Request Forgery, ํฌ๋กœ์Šค ์‚ฌ์ดํŠธ ์š”์ฒญ ์œ„์กฐ

  • ๋‹ค๋ฅธ ์‚ฌ์ดํŠธ ๊ฐ„์— ์š”์ฒญ์„ ์œ„์กฐํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ์‚ฌ์šฉ์ž๊ฐ€ ์ธ์ฆ๋œ ์ƒํƒœ๋กœ ๋ธŒ๋ผ์šฐ์ €์— ์„ธ์…˜ ์ •๋ณด๊ฐ€ ๋‚จ์•„ ์žˆ์„ ๋•Œ, ์‚ฌ์šฉ์ž์˜ ์˜์ง€์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ๊ณต๊ฒฉ์ž๊ฐ€ ์˜๋„ํ•œ ์•…์˜์ ์ธ ์š”์ฒญ์„ ์„œ๋ฒ„์— ์ „์†กํ•˜๊ฒŒ ํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ ๊ถŒํ•œ์„ ์ด์šฉํ•˜๋Š” ๊ณต๊ฒฉ ๋ฐฉ๋ฒ•

 

CSRF์˜ ๊ณต๊ฒฉ ์›๋ฆฌ

  • CSRF ๊ณต๊ฒฉ์— ๋Œ€ํ•œ ์ทจ์•ฝ์ ์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธํ•˜์—ฌ ๋‚จ์•„์žˆ๋Š” ์ฟ ํ‚ค ๊ธฐ๋ฐ˜ ์„ธ์…˜ ์ •๋ณด๋ฅผ ์ด์šฉํ•˜์—ฌ ์ฟ ํ‚ค ๊ธฐ๋ฐ˜ ์ธ์ฆ์„ ๋ฌด๋ ฅํ™”ํ•˜๋Š” ๊ฒƒ์ด๋‹ค

-- CSRF์˜ ์œ ๋„ ๋งค์ฒด

  • ์ด๋ฉ”์ผ, ๋ฉ”์‹œ์ง€, ์ด๋ฏธ์ง€ ๋งํฌ ๋“ฑ ์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • ๋งํฌ๋‚˜ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๊ฒŒ ์œ ๋„ํ•จ

 

CSRF ๋ฐฉ์–ด ๋ฐฉ๋ฒ•

์‚ฌ์šฉ์ž์˜ ์š”์ฒญ/์ถœ์ฒ˜๋ฅผ ๊ฒ€์ฆํ•˜์—ฌ ์•…์„ฑ ์š”์ฒญ ๋ฐฉ์ง€ ๋ฐ ๋ฌดํšจํ™”

  1. 1. CSRF ํ† ํฐ
  2. 2. SameSite ์ฟ ํ‚ค ์†์„ฑ ์„ค์ •
  3. 3. Referrer Policy ์„ค์ •
  4. 4. REST API์™€ JWT

 

1. CSRF ํ† ํฐ

  • ์„œ๋ฒ„์—์„œ ๊ณ ์œ ํ•œ ํ† ํฐ์„ ์ƒ์„ฑํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌํ•˜๋Š” ํ† ํฐ
  • ์„œ๋ฒ„์— ๋“ค์–ด์˜จ ์š”์ฒญ์ด ์ง„์งœ ์„œ๋ฒ„์—์„œ ์š”์ฒญ๋œ ๊ฒƒ์ด ๋งž๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์šฉ๋„
  • ํด๋ผ์ด์–ธํŠธ์—์„œ POST ์š”์ฒญ์— hidden ๊ฐ’์— ํ† ํฐ์„ ๋„ฃ์–ด ๋ณด๋‚ด๋ฉด ์„œ๋ฒ„์—์„œ ํ™•์ธ
    • ๋ณดํ†ต์€ Spring Security ์„ค์ •์„ ํ†ตํ•ด ํ™•์ธ

๋‹ค๋งŒ, ์ด ํ† ํฐ์€ post ์š”์ฒญ์—๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

 

2. SameSite ์ฟ ํ‚ค ์†์„ฑ ์„ค์ •

  • ๋™์ผ ์ถœ์ฒ˜ ์š”์ฒญ๋งŒ ํ—ˆ์šฉํ•˜๋Š” ์„ค์ •์„ ํ†ตํ•ด ํฌ๋กœ์Šค ์‚ฌ์ดํŠธ ์š”์ฒญ์„ ๋ฐฉ์ง€
  • ์„œ๋ฒ„์ธก์—์„œ set-cookie ํ—ค๋”๋ฅผ ํ†ตํ•ด ์„ค์ • ๊ฐ€๋Šฅ
  • ์„ค์ • ์˜ต์…˜

  • Lax์—์„œ ๋งํ•˜๋Š” ์ผ๋ถ€ ์ƒํ™ฉ์€ ์ฃผ๋กœ get ์š”์ฒญ
  • None์œผ๋กœ ๋ชจ๋“  ์ƒํ™ฉ์–ผ ํ—ˆ์šฉํ•  ๋• Secure ์†์„ฑ์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด์„œ https๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์ „์†ก๋˜๋„๋ก ํ•˜์—ฌ ์‚ฌ์šฉ

 

3. Referrer Policy

  • Referrer : ์›น ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•œ ์›๋ž˜ ์ถœ์ฒ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํ—ค๋”

 

4. REST API์™€ JWT

  • ์ทจ์•ฝ์ ์€ ์ฟ ํ‚ค ๊ธฐ๋ฐ˜ ์„ธ์…˜ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜์ง€ ์•Š๋„๋ก Statelessํ•œ REST API ์‚ฌ์šฉ
  • JWT๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž ์ธ์ฆ ๋ฐ ์ธ๊ฐ€๋ฅผ ์ง„ํ–‰ํ•˜์—ฌ ์„ธ์…˜์— ์˜์กดํ•˜์ง€ ์•Š๋Š” ๋ณด์•ˆ ๊ตฌ์กฐ ํ˜•์„ฑ

 

 

XSS    

XSS์˜ ์ •์˜

Cross-Site Request Scripting, ํฌ๋กœ์Šค ์‚ฌ์ดํŠธ ์Šคํฌ๋ฆฝํŒ…

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

 

xss ๊ณต๊ฒฉ ์œ ํ˜•

  1. Stored XSS (์ €์žฅํ˜• ํฌ๋กœ์Šค ์‚ฌ์ดํŠธ ์Šคํฌ๋ฆฝํŠธ)
  2. Reflected XSS (๋ฐ˜์‚ฌํ˜• ํฌ๋กœ์Šค ์‚ฌ์ดํŠธ ์Šคํฌ๋ฆฝํŠธ)
  3. DOM-based XSS (DOM ๊ธฐ๋ฐ˜ ํฌ๋กœ์Šค ์‚ฌ์ดํŠธ ์Šคํฌ๋ฆฝํŠธ)

 

1. Stored XSS (์ €์žฅํ˜• ํฌ๋กœ์Šค ์‚ฌ์ดํŠธ ์Šคํฌ๋ฆฝํŠธ)

  • ๊ณต๊ฒฉ์ž๊ฐ€ ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์„œ๋ฒ„์— ์ €์žฅ → ์„œ๋น„์Šค ํŽ˜์ด์ง€์—์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์Šคํฌ๋ฆฝํŠธ ๋…ธ์ถœ
  • ๊ณต๊ฒฉ์ž์˜ ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์„œ๋ฒ„์— ์ €์žฅ๋˜์–ด ๋ถˆํŠน์ • ๋‹ค์ˆ˜๋ฅผ ๋Œ€์ƒ์œผ๋กœ ๊ณต๊ฒฉ์— ์ด์šฉ๋  ์ˆ˜ ์žˆ์–ด ๋ฒ”์œ„๊ฐ€ ๊ฐ€์žฅ ํผ

 

2. Reflected XSS (๋ฐ˜์‚ฌํ˜• ํฌ๋กœ์Šค ์‚ฌ์ดํŠธ ์Šคํฌ๋ฆฝํŠธ)

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

 

3. DOM-based XSS (DOM ๊ธฐ๋ฐ˜ ํฌ๋กœ์Šค ์‚ฌ์ดํŠธ ์Šคํฌ๋ฆฝํŠธ)

  • ์ €์žฅํ˜•, ๋ฐ˜์‚ฌํ˜•๊ณผ ๋‹ฌ๋ฆฌ ์„œ๋ฒ„์— ์š”์ฒญ์—†์ด ๋ฐœ์ƒ
  • DOM ์˜์—ญ์—์„œ ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋˜์–ด ์„œ๋ฒ„์™€ ์ƒํ˜ธ์ž‘์šฉ์—†์ด ์‚ฌ์šฉ์ž์˜ ๋ธŒ๋ผ์šฐ์ € ์ž์ฒด์—์„œ ์‹คํ–‰๋˜์–ด ์ทจ์•ฝ์ ์„ ๋ฐœ๊ฒฌํ•˜๊ธฐ ์–ด๋ ค์›€

 

XSS ๋ฐฉ์–ด ๋ฐฉ๋ฒ•

๋ฐฉ์–ด ์›๋ฆฌ : ์Šคํฌ๋ฆฝํŠธ ์‚ฝ์ž… ๋ฐ ์‹คํ–‰ ๋ฐฉ์ง€ ๋˜๋Š” ๋ฌดํšจํ™”

  1. ์ž…๋ ฅ๊ฐ’ ๊ฒ€์ฆ ๋ฐ ํ•„ํ„ฐ๋ง
  2. ํ™”์ดํŠธ ๋ฆฌ์ŠคํŠธ ๋ฐฉ์‹ ํ•„ํ„ฐ๋ง
  3. ์ถœ๋ ฅ ๊ฐ’ ์ธ์ฝ”๋”ฉ
  4. CSP

 

1. ์ž…๋ ฅ๊ฐ’ ๊ฒ€์ฆ ๋ฐ ํ•„ํ„ฐ๋ง

์ž…๋ ฅ๊ฐ’ ๊ฒ€์ฆ

  • ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ๊ฐ’์ด ํ˜•์‹์ด๋‚˜ ๊ทœ์น™์— ๋งž๋Š”์ง€ ํ™•์ธ
  • XSS ๋ฐฉ์ง€๋ฅผ ์œ„ํ•œ ์ง์ ‘์ ์ธ ์กฐ์น˜๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ์ž…๋ ฅ๊ฐ’ ํ•„ํ„ฐ๋ง์ด๋‚˜ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ ๋ฐฉ์‹๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ

 

์ž…๋ ฅ๊ฐ’ ํ•„ํ„ฐ๋ง

  • ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‚ฝ์ž…๋˜์–ด๋„ ๋™์ž‘ํ•˜์ง€ ์•Š๋„๋ก ์Šคํฌ๋ฆฝํŠธ์— ์‚ฌ์šฉ๋˜๋Š” ์ฃผ์š” ํŠน์ˆ˜ ๋ฌธ์ž๋ฅผ HTML Entity๋กœ ์น˜ํ™˜ํ•˜์—ฌ ์ž…๋ ฅ

 

2. ํ™”์ดํŠธ ๋ฆฌ์ŠคํŠธ ๋ฐฉ์‹ ํ•„ํ„ฐ๋ง

  • ํ—ˆ์šฉ๋œ ๊ฐ’์ด๋‚˜ ํŒจํ„ด๋งŒ์„ ํ—ˆ์šฉํ•˜๊ณ , ๋‚˜๋จธ์ง€๋Š” ์ฐจ๋‹จ
  • ์˜ˆ) HTML ํ•„๋“œ์—์„œ ํ—ˆ์šฉํ•  ํƒœ๊ทธ๋‚˜ ์†์„ฑ์„ ์ง€์ •ํ•˜์—ฌ <b>, <i>์™€ ๊ฐ™์€ ์•ˆ์ „ํ•œ ํƒœ๊ทธ๋งŒ ํ—ˆ์šฉ

 

3. ์ถœ๋ ฅ ๊ฐ’ ์ธ์ฝ”๋”ฉ

  • ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๊ฐ’์„ ์ถœ๋ ฅํ•  ๋•Œ, HTML์ด๋‚˜ JavaScript ์ฝ”๋“œ๋กœ ์‹คํ–‰๋˜์ง€ ์•Š๋„๋ก ์ธ์ฝ”๋”ฉ์„ ์ ์šฉํ•˜์—ฌ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ์ฐจ๋‹จ

๋”ฐ๋ผ์„œ, ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํ˜น์—ฌ๋‚˜ ์‚ฝ์ž…๋˜์—ˆ๋”๋ผ๋„ ์ด๋ฅผ ์ถœ๋ ฅํ•  ๋•Œ ์‹คํ–‰๋˜์ง€ ์•Š์Œ

 

4. CSP

  • Content Security Policy, ์ปจํ…์ธ  ๋ณด์•ˆ ์ •์ฑ…
  • ํ—ˆ์šฉ๋œ ๋ฆฌ์†Œ์Šค ์™ธ์—๋Š” ์‹คํ–‰๋˜์ง€ ์•Š๋„๋ก ์„ค์ •

์„ค์ • ๋ฐฉ๋ฒ•

1.  http ์‘๋‹ต ํ—ค๋”์— Content-Security-Policy ์„ค์ •

2. <meta> ํƒœ๊ทธ์— http-equiv ์†์„ฑ ์„ค์ •

  • ๋ฆฌ์†Œ์Šค๋ฅผ ํ˜„์žฌ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋กœ๋“œ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๊ฑฐ๋‚˜ ํŠน์ • ๋„๋ฉ”์ธ์—์„œ๋งŒ ํ—ˆ์šฉํ•˜๋„๋ก ์„ค์ •
  • default-src 'self' : ๊ธฐ๋ณธ ๋ฆฌ์†Œ์Šค๋ฅผ ํ˜„์žฌ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋กœ๋“œ
  • 'unsafe-inline' : ๊ฐ™์€ ์ถœ์ฒ˜์—์„œ ์˜จ ์Šคํฌ๋ฆฝํŠธ ํ—ˆ์šฉ
 
 

 

CSRF์™€ XSS ์ •๋ฆฌ