๐Ÿ“ข ๋ธ”๋กœ๊ทธ ์ด์‚ฌ ์ค‘์ž…๋‹ˆ๋‹ค!

์•„๋ž˜ ๋งํฌ๋ฅผ ํด๋ฆญํ•ด ์ƒˆ๋กœ์šด ๋ธ”๋กœ๊ทธ์—์„œ ๋” ๋งŽ์€ ๊ธ€์„ ๋งŒ๋‚˜๋ณด์„ธ์š”.
๐Ÿ‘‰ ์ด์ „ ๋ธ”๋กœ๊ทธ ๋ฐ”๋กœ ๊ฐ€๊ธฐ

2 ๋ถ„ ์†Œ์š”

Security

๐Ÿž XSS

XSS(Cross-Site Scripting)๋Š” ๊ณต๊ฒฉ์ž๊ฐ€ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์›น์‚ฌ์ดํŠธ(์œ ๋ช…ํ•œ ์‚ฌ์ดํŠธ ํ˜น์€ ๋‚ด๊ฐ€ ๋งŒ๋“  ์‚ฌ์ดํŠธ)์— ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฝ์ž…ํ•˜์—ฌ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ž‘๋™ ์‹œํ‚ค๋Š” ๊ณต๊ฒฉ

๐Ÿž XSS ๊ณต๊ฒฉ์˜ ์ข…๋ฅ˜

1. Stored XSS(์ €์žฅํ˜•)

๋Œ€ํ‘œ์ ์ธ ์˜ˆ์‹œ๋กœ ๊ฒŒ์‹œํŒ์— ๊ณต๊ฒฉ์ž๊ฐ€ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ๊ฒŒ์‹œํŒ์— ์ €์žฅํ•˜๊ณ  ๊ทธ๊ฑธ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋“ค์ด ๋ณด๋Š” ์ˆœ๊ฐ„ ์ž‘๋™์‹œํ‚ค๋Š” ๊ณต๊ฒฉ

๋‚ด๊ฐ€ ๊ฒŒ์‹œํŒ์— ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ๊ฒŒ์‹œํŒ์— ์ €์žฅํ•˜๋ฉด ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋“ค์ด ๋ณด๋Š” ์ˆœ๊ฐ„ ์•Œ๋žŒ์œผ๋กœ โ€œ๋‹น์‹ ์˜ ์ •๋ณด๊ฐ€ ํ„ธ๋ ธ์–ด์š”โ€๊ฐ€ ์‹คํ–‰๋จ.

Stored XSS Example

2. Reflected XSS(๋ฐ˜์‚ฌํ˜•)

url์„ ๊ทธ๋Œ€๋กœ ๋ณด์—ฌ์ฃผ๋Š” ์‚ฌ์ดํŠธ๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ณต๊ฒฉ์ž๊ฐ€ ์Šคํฌ๋ฆฝํŠธ๋ฅผ url์— ์ถ”๊ฐ€ํ•˜์—ฌ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋“ค์ด ๋ณด๋Š” ์ˆœ๊ฐ„ ์•Œ๋žŒ์œผ๋กœ โ€œ๋‹น์‹ ์˜ ์ •๋ณด๊ฐ€ ํ„ธ๋ ธ์–ด์š”โ€๊ฐ€ ์‹คํ–‰๋จ.

http://example.com/search?q=<script>alert(โ€œ๋‹น์‹ ์˜ ์ •๋ณด๊ฐ€ ํ„ธ๋ ธ์–ด์š”โ€)</script>

url์ฐฝ์„ ๋ณด๋ฉด ๋ณ€ํ•œ๊ฑธ ์•Œ ์ˆ˜ ์žˆ์Œ.

Reflected XSS Example

3. DOM-based XSS(๋” ๊ธฐ๋ฐ˜)

DOM ๊ฐ์ฒด๋ฅผ ์ œ์–ดํ•˜๋Š” ๊ณผ์ •์—์„œ ์Šคํฌ๋ฆฝํŠธ๋กœ ๊ณต๊ฒฉํ•˜๋Š” ๋ฐฉ๋ฒ•. url ์ดํ›„ ํ•ด์‹œ๊ฐ’์œผ๋กœ ๊ณต๊ฒฉํ•˜๋Š” ์Šคํƒ€์ผ์ž„.

DOM-based XSS Example

๐Ÿž ๋ฐ˜์‚ฌํ˜•๊ณผ DOM-based์˜ ์ฐจ์ด

๋จผ๊ฐ€ ์œ ์‚ฌํ•˜๊ฒŒ ๋ณด์ธ๋‹ค. ํ•˜์ง€๋งŒ, ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹ฌ๋Š” ์‹œ์ ์ด ๋‹ค๋ฅด๋‹ค.

๋ฐ˜์‚ฌํ˜•์€ ์ผ๋‹จ ํ•œ๋ฒˆ ์„œ๋ฒ„์— ์ „๋‹ฌ๋˜์–ด์•ผํ•จ.

๐Ÿš€ ๋ฐ˜์‚ฌํ˜• ๊ณต๊ฒฉ ํ๋ฆ„

  1. ์‚ฌ์šฉ์ž ํด๋ฆญ - ์•…์„ฑ ๋งํฌ ํด๋ฆญ
  2. ์„œ๋ฒ„ ์ „๋‹ฌ - ์š”์ฒญ์ด ์„œ๋ฒ„๋กœ ์ „์†ก
  3. ๊ฒ€์ฆ ์ƒ๋žต - ์„œ๋ฒ„์—์„œ ์ž…๋ ฅ๊ฐ’ ๊ฒ€์ฆ ์—†์ด ์‘๋‹ต
  4. ์•…์„ฑ ์ฝ”๋“œ ์‹คํ–‰ - ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์‘๋‹ต์„ ์Šคํฌ๋ฆฝํŠธ๋กœ ํ•ด์„ํ•˜์—ฌ ์‹คํ–‰

DOM-based๋Š” ๋ณ„๋„์˜ ์„œ๋ฒ„ ์š”์ฒญ์ด ์—†์Œ.

๐Ÿš€ DOM-based ๊ณต๊ฒฉ ํ๋ฆ„

  1. ์‚ฌ์šฉ์ž ํด๋ฆญ - ์•…์„ฑ ๋งํฌ ํด๋ฆญ
  2. ์ •์ƒ HTML ์‘๋‹ต - ์„œ๋ฒ„์—์„œ ์ •์ƒ์ ์ธ HTML ๋ฌธ์„œ ์‘๋‹ต
  3. ํด๋ผ์ด์–ธํŠธ ์ธก ์ฒ˜๋ฆฌ - ๋ธŒ๋ผ์šฐ์ €๊ฐ€ JavaScript ์‹คํ–‰
  4. URL ํŒŒ์‹ฑ - JavaScript๊ฐ€ URL์˜ ํ•ด์‹œ(#) ๋ถ€๋ถ„์—์„œ ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ ์ถ”์ถœ
  5. DOM ์กฐ์ž‘ - ์ถ”์ถœํ•œ ์Šคํฌ๋ฆฝํŠธ๋กœ DOM ์กฐ์ž‘
  6. ์•…์„ฑ ์ฝ”๋“œ ์‹คํ–‰ - ์กฐ์ž‘๋œ DOM์„ ํ†ตํ•ด ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰

๐Ÿฅ ๋Œ€์ฒ˜๋ฒ•

XSS ๊ฐ™์€ ํด๋ผ์ด์–ธํŠธ ์ธก ๋ณด์•ˆ ๋ฌธ์ œ๋Š” ์ž…๋ ฅ ๊ฒ€์ฆ๊ณผ ์ถœ๋ ฅ ์ด์Šค์ผ€์ดํ•‘์œผ๋กœ ํ•ด๊ฒฐํ•œ๋‹ค. ์‚ฌ์šฉ์ž ์ž…๋ ฅ์€ ์„œ๋ฒ„ยทํด๋ผ์ด์–ธํŠธ ์–‘์ชฝ์—์„œ ๊ฒ€์ฆํ•˜๊ณ , HTML๋กœ ์ถœ๋ ฅํ•  ๋•Œ๋Š” ํŠน์ˆ˜ ๋ฌธ์ž๋ฅผ ๋ฐ˜๋“œ์‹œ ์ด์Šค์ผ€์ดํ”„ ์ฒ˜๋ฆฌํ•ด์•ผํ•œ๋‹ค.

1. ์•ˆ์ „ํ•œ ์ž…๋ ฅ ๊ฒ€์ฆ

innerHTML๋กœ ๊ทธ๋Œ€๋กœ ๋„ฃ์ง€ ๋ง๊ณ  ํ…์ŠคํŠธ ์ „์šฉ API๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, HTML์„ ํ—ˆ์šฉํ•ด์•ผ ํ•  ๋•Œ๋Š” ๊ฒ€์ฆ๋œ sanitizer๋ฅผ ์‚ฌ์šฉ.

// โŒ ์ž˜๋ชป๋œ ๋ฐฉ๋ฒ• (์ทจ์•ฝ)
element.innerHTML = userInput;

// โœ… ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ• (์ž๋™ ์ด์Šค์ผ€์ดํ”„)
element.textContent = userInput;

// โœ… HTML์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ (๊ฒ€์ฆ๋œ sanitizer ์‚ฌ์šฉ)
import DOMPurify from 'dompurify';

element.innerHTML = DOMPurify.sanitize(userInput);

ํŠนํžˆ, ์œ„ํ—˜ํ•œ DOM API๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๊ฒŒ ์ข‹๋‹ค.

// โŒ ์œ„ํ—˜ํ•œ DOM API
innerHTML, insertAdjacentHTML, document.write, eval, new Function

2. Content-Security-Policy (CSP)

CSP๋ฅผ ๋„์ž…ํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ € ์ฐจ์›์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์Šคํฌ๋ฆฝํŠธ ์†Œ์Šค๋ฅผ ์ œํ•œ ๊ฐ€๋Šฅ. ํ—ค๋” ๋˜๋Š” ๋ฉ”ํƒ€ ํƒœ๊ทธ ๋ฐฉ์‹์œผ๋กœ ์ ์šฉํ•˜๋ฉด ๋œ๋‹ค.

<!-- ์˜ˆ: ๋ฉ”ํƒ€ ํƒœ๊ทธ ๋ฐฉ์‹ (์‹ค๋ฌด์—์„œ๋Š” HTTP ํ—ค๋”๋กœ ์„ค์ • ๊ถŒ์žฅ) -->
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' https://trusted-cdn.com;">

3. ์„ธ์…˜ ๋ณดํ˜ธ โ€” HttpOnly ์ฟ ํ‚ค

์„ธ์…˜ ์ฟ ํ‚ค์— HttpOnly(๋ฐ Secure, SameSite) ํ”Œ๋ž˜๊ทธ๋ฅผ ์„ค์ •ํ•˜๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์ฟ ํ‚ค๋ฅผ ์ฝ์ง€ ๋ชปํ•˜๊ฒŒ ํ•ด ์„ธ์…˜ ํƒˆ์ทจ ์œ„ํ—˜์„ ์ค„์ด๋ฉด ๋จ.

Set-Cookie: sessionId=...; HttpOnly; Secure; SameSite=Strict

4. ํ”„๋ ˆ์ž„์›Œํฌ/ํ…œํ”Œ๋ฆฟ ์‚ฌ์šฉ ๊ถŒ์žฅ

์‚ฌ๋žŒ์€ ๋ˆ„๊ตฌ๋‚˜ ์‹ค์ˆ˜ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋ฏธ ๋งŒ๋“ค์–ด์ง„ ํ”„๋ ˆ์ž„์›Œํฌ๋‚˜ ํ…œํ”Œ๋ฆฟ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. react, vue, angular ๋“ฑ ์ฃผ์š” ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ถœ๋ ฅ ์ด์Šค์ผ€์ดํ”„๋ฅผ ์ œ๊ณตํ•จ.

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ