# XSS(Cross Site Script)λž€

μ›Ή μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ‚¬μš©μž μž…λ ₯ 값에 λŒ€ν•œ 필터링이 μ œλŒ€λ‘œ 이루어지지 μ•Šμ„ 경우, κ³΅κ²©μžκ°€ μž…λ ₯이 κ°€λŠ₯ν•œ 폼에 μ•…μ˜μ μΈ 슀크립트λ₯Ό μ‚½μž…ν•˜μ—¬ ν•΄λ‹Ή μŠ€ν¬λ¦½νŠΈκ°€ ν¬μƒμž μΈ‘μ—μ„œ λ™μž‘ν•˜λ„λ‘ ν•˜μ—¬ μ•…μ˜μ μΈ ν–‰μœ„λ₯Ό μˆ˜ν–‰ν•˜λŠ” 취약점이닀. κ³΅κ²©μžλŠ” 취약점을 μ΄μš©ν•˜μ—¬ μ‚¬μš©μžμ˜ κ°œμΈμ •λ³΄ 및 쿠킀정보 νƒˆμ·¨, μ•…μ„±μ½”λ“œ 감염, μ›Ή νŽ˜μ΄μ§€ λ³€μ‘° λ“±μ˜ 곡격을 μˆ˜ν–‰ν•œλ‹€.

# XSS 곡격 μ’…λ₯˜

# 1️⃣Stored XSS (μ €μž₯ν˜• XSS)

  • κ³΅κ²©μžκ°€ μ·¨μ•½ν•œ μ›Ήμ„œλ²„μ— μ•…μ„± 슀크립트λ₯Ό μ €μž₯ν•˜λ©΄ ν¬μƒμžκ°€ ν•΄λ‹Ή 자료λ₯Ό μš”μ²­ν•  λ–„ ν•΄λ‹Ή μ•…μ„± μŠ€ν¬λ¦½νŠΈκ°€ μ‚½μž…λœ 응닡 νŽ˜μ΄μ§€κ°€ μ „λ‹¬λ˜μ–΄ ν΄λΌμ΄μ–ΈνŠΈ μΈ‘μ—μ„œ λ™μž‘ν•˜λŠ” 방식이닀.

img

# 2️⃣Reflected XSS (λ°˜μ‚¬ν˜• XSS)

  • 외뢀에 μžˆλŠ” μ•…μ„± μŠ€ν¬λ¦½νŠΈκ°€ ν¬μƒμž μ•‘μ…˜μ— μ˜ν•΄ μ·¨μ•½ν•œ μ›Ήμ„œλ²„λ‘œ μ „λ‹¬λ˜κ³ , μ›Ήμ„œλ²„μ˜ 응닡 νŽ˜μ΄μ§€μ— ν•΄λ‹Ή μ•…μ„± μŠ€ν¬λ¦½νŠΈκ°€ μ‚½μž…λ˜μ–΄ ν¬μƒμž μΈ‘μ—μ„œ λ™μž‘ν•˜λŠ” 방식이닀.

img

# 3️⃣DOM based XSS (DOM 기반 XSS)

  • ν¬μƒμžμ˜ μ›Ή λΈŒλΌμš°μ €μ—μ„œ 응닡 νŽ˜μ΄μ§€μ— ν¬ν•¨λœ 정상적인 μŠ€ν¬λ¦½νŠΈκ°€ λ™μž‘ν•˜λ©΄μ„œ DOM 객체λ₯Ό μ‹€ν–‰ν•  λ•Œ URL 등에 ν¬ν•¨λœ μ•…μ„± μŠ€ν¬λ¦½νŠΈκ°€ λ™μž‘ν•˜λŠ” 방식이닀. 응닡 νŽ˜μ΄μ§€μ— 관계없이 μ›Ή λΈŒλΌμš°μ €μ—μ„œ λ°œμƒν•œλ‹€.

img

# λŒ€μ‘λ°©μ•ˆ

  • μ‚¬μš©μž μž…λ ₯κ°’ 검증을 λ°˜λ“œμ‹œ μ„œλ²„λ‹¨μ—μ„œ ν•œλ‹€.
  • μ‚¬μš©μž μž…λ ₯ λ¬Έμžμ—΄μ—μ„œ HTML μ½”λ“œλ‘œ 인식될 수 μžˆλŠ” 특수문자λ₯Ό 일반문자둜 μΉ˜ν™˜ν•˜μ—¬ μ²˜λ¦¬ν•œλ‹€.
HTML 특수문자 HTML Entity
<, > &lt;, &gt;
(. ) &#x28;, &#x29;
& &amp;
/ &#x2F;
" &quot;
' &#x27;
# &#x23;
  • κ²Œμ‹œνŒ λ“±μ—μ„œ HTML νƒœκ·Έλ₯Ό ν—ˆμš©ν•΄μ•Όν•˜λŠ” 경우, HTML νƒœκ·Έ ν™”μ΄νŠΈλ¦¬μŠ€νŠΈλ₯Ό μ„ μ • ν›„, ν•΄λ‹Ή νƒœκ·Έλ§Œ ν—ˆμš©ν•˜λŠ” 방식을 μ μš©ν•œλ‹€.

Reference

  • https://stupidsecurity.tistory.com/17
Last Updated: 6/18/2023, 2:13:15 PM