1. XSS

(1) ์ดํ•ด

XSS(Cross-Site Scripting)๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ณด์•ˆ ์ทจ์•ฝ์  ์ค‘ ํ•˜๋‚˜๋กœ, ์•…์˜์ ์ธ ์‚ฌ์šฉ์ž๊ฐ€ ์›น ํŽ˜์ด์ง€์— ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฝ์ž…ํ•˜์—ฌ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰์‹œํ‚ค๋Š” ๊ณต๊ฒฉ ๊ธฐ๋ฒ•์ด๋‹ค. ๋งˆ์น˜ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ง‘์— ๋ชฐ๋ž˜ ๋“ค์–ด๊ฐ€ ์ „๋“ฑ์„ ์ผœ๊ฑฐ๋‚˜ ์Œ์•…์„ ํ‹€์–ด๋†“๋Š” ๊ฒƒ๊ณผ ๋น„์Šทํ•˜๋‹ค.
[๊ทธ๋ฆผ 1-1] XSS ๊ณต๊ฒฉ[๊ทธ๋ฆผ 1-1] XSS ๊ณต๊ฒฉ
[๊ทธ๋ฆผ 1-1] XSS ๊ณต๊ฒฉ
์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๊ณต๊ฒฉ์ž๋Š” XSS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ณด๋‚ด๊ณ , ์‚ฌ์šฉ์ž์˜ ๋ธŒ๋ผ์šฐ์ €๋Š” ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ถœ์ฒ˜์—์„œ ์™”๋‹ค๊ณ  ๊ฐ„์ฃผํ•˜๋ฏ€๋กœ ํ•ด๋‹น ์‚ฌ์šฉ์ž์˜ ๋ธŒ๋ผ์šฐ์ €์— ๋ณด๊ด€๋˜๊ณ  ์‹คํ–‰๋œ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ, ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๋Š” ์‚ฌ์šฉ์ž์˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ชจ๋“  ์ฟ ํ‚ค, ์„ธ์…˜ ํ† ํฐ ๋˜๋Š” ๊ธฐํƒ€ ๋ฏผ๊ฐํ•œ ์ •๋ณด์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ์ด๋ ‡๊ฒŒ ๊ณต๊ฒฉ์ž๋Š” XSS๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ ํƒˆ์ทจํ•˜๊ฑฐ๋‚˜ ์›น ์‚ฌ์ดํŠธ๋ฅผ ๋ณ€์กฐ/์†์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
ย 

(2) XSS ๊ณต๊ฒฉ์˜ ์ข…๋ฅ˜

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

Stored XSS๋ž€ ์•…์˜์ ์ธ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์„œ๋ฒ„์— ์ €์žฅ๋˜์–ด ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๊ฐ€ ํ•ด๋‹น ์›น ํŽ˜์ด์ง€์— ์ ‘์†ํ•  ๋•Œ๋งˆ๋‹ค ์‹คํ–‰๋˜๋Š” XSS ๊ณต๊ฒฉ์ด๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ง์ ‘ ์ €์žฅ๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ณต๊ฒฉ์ด ์ด๋ฃจ์–ด์ง€๋ฏ€๋กœ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ ์ง€์†์ ์œผ๋กœ ์œ„ํ˜‘์ด ๋œ๋‹ค. Stored XSS๋Š” ๋Œ“๊ธ€์ด๋‚˜ ๊ฒŒ์‹œ๊ธ€, ํ”„๋กœํ•„ ๋“ฑ ์‚ฌ์šฉ์ž ์ƒ์„ฑ ์ฝ˜ํ…์ธ ๊ฐ€ ์ €์žฅ๋˜๋Š” ๊ณณ์—์„œ ์ฃผ๋กœ ๋ฐœ์ƒํ•œ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฒŒ์‹œํŒ์— ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ํฌํ•จํ•˜์—ฌ ๊ธ€์„ ์ž‘์„ฑํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.
<script>alert('XSS ๊ณต๊ฒฉ!');</script>
๋”ฐ๋กœ XSS ๊ณต๊ฒฉ์— ๋Œ€ํ•œ ์˜ˆ๋ฐฉ์ด ๋˜์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด ์„œ๋ฒ„์— ์ €์žฅ๋œ ํ•ด๋‹น ๊ฒŒ์‹œ๊ธ€์— ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๊ฐ€ ์ ‘์†ํ•  ๋•Œ๋งˆ๋‹ค ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋˜์–ด ๊ฒฝ๊ณ ์ฐฝ์ด ๋œจ๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.

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

Reflected XSS๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๊ฐ’์ด ์„œ๋ฒ„์—์„œ ์ฒ˜๋ฆฌ๋œ ํ›„ ๋‹ค์‹œ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฐ˜ํ™˜๋  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” XSS ๊ณต๊ฒฉ์ด๋‹ค. ์ฆ‰, ์‚ฌ์šฉ์ž๊ฐ€ ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํฌํ•จํ•œ ์ž…๋ ฅ์„ ์„œ๋ฒ„์— ๋ณด๋ƒˆ์„ ๋•Œ ์„œ๋ฒ„๊ฐ€ ์ด๋ฅผ ํ•„ํ„ฐ๋งํ•˜์ง€ ์•Š๊ณ  ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜ํ•˜์—ฌ ๊ณต๊ฒฉ์ด ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ด๋‹ค. ์ฃผ๋กœ URL์— ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํฌํ•จํ•ด ๋ณด๋‚ด๋Š” ์‹์œผ๋กœ ๊ณต๊ฒฉ์ด ์ด๋ฃจ์–ด์ง€๋ฉฐ, ์ผํšŒ์„ฑ ๊ณต๊ฒฉ์ด๋ผ๋Š” ํŠน์ง•์ด ์žˆ๋‹ค. ์ด์™€ ๊ฐ™์ด Reflected XSS๋Š” ๊ฒ€์ƒ‰ ์—”์ง„, ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€, ๊ฒŒ์‹œํŒ์˜ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ๋“ฑ์—์„œ ์ฃผ๋กœ ๋ฐœ์ƒํ•œ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, http://example.com/search?q=<script>alert('XSS ๊ณต๊ฒฉ!');</script> ๊ณผ ๊ฐ™์ด URL์„ ์ž…๋ ฅํ•˜์—ฌ ๊ฒ€์ƒ‰์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋˜๋ฉด ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ํŽ˜์ด์ง€์—์„œ ํ•ด๋‹น ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋˜์–ด ๊ฒฝ๊ณ ์ฐฝ์ด ๋œจ๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.

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

DOM-based XSS๋Š” ํด๋ผ์ด์–ธํŠธ ์ธก ์Šคํฌ๋ฆฝํŠธ์—์„œ DOM์„ ์กฐ์ž‘ํ•˜์—ฌ ๋ฐœ์ƒํ•˜๋Š” XSS ๊ณต๊ฒฉ์ด๋‹ค. ํด๋ผ์ด์–ธํŠธ ์ธก JavaScript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ทจ์•ฝ์ ์„ ์ด์šฉํ•˜์—ฌ ๊ณต๊ฒฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ์ด๋ ‡๋“ฏ ์„œ๋ฒ„ ์ธก์ด ์•„๋‹Œ ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ์ทจ์•ฝ์ ์ด ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„ ์ธก ํ•„ํ„ฐ๋ง ๋งŒ์œผ๋กœ๋Š” ๋ฐฉ์–ด๊ฐ€ ์–ด๋ ค์šฐ๋ฏ€๋กœ, ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ๊ทธ๋Œ€๋กœ DOM์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ ํŠนํžˆ ์œ ์˜ํ•ด์•ผ ํ•œ๋‹ค. DOM-based XSS๋Š” JavaScript๋กœ ๋™์ ์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” HTML ์ฝ˜ํ…์ธ  ๋“ฑ์—์„œ ์ฃผ๋กœ ๋ฐœ์ƒํ•œ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜์™€ ๊ฐ™์ด ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ ๊ฐ’์„ ์ฝ์–ด์™€ ๊ทธ๋Œ€๋กœ DOM์— ์ถ”๊ฐ€ํ•˜๋Š” JavaScript ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.
<input type="text" id="userInput"> <button onclick="displayMessage()">๋ฉ”์‹œ์ง€ ํ‘œ์‹œ</button> <div id="message"></div> <script> function displayMessage() { // ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๊ฐ’ ๊ฐ€์ ธ์˜ค๊ธฐ const userInput = document.getElementById("userInput").value; // ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๊ฐ’์„ ์ง์ ‘ innerHTML์— ์‚ฝ์ž… (์ทจ์•ฝ์ !) document.getElementById("message").innerHTML = userInput; } </script>
์œ„์˜ ๊ฒฝ์šฐ ์ž…๋ ฅ ๊ฐ’์— <script>alert('XSS ๊ณต๊ฒฉ!');</script> ๊ณผ ๊ฐ™์€ ๊ฐ’์ด ๋“ค์–ด์˜ค๊ฒŒ ๋˜๋ฉด, JavaScript ์ฝ”๋“œ์—์„œ ํ•ด๋‹น ์ž…๋ ฅ ๊ฐ’์„ ์ฝ์–ด์™€ DOM์— ์ง์ ‘ ์ถ”๊ฐ€ํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ, ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋˜์–ด ๊ฒฝ๊ณ  ์ฐฝ์ด ๋œจ๊ฒŒ ๋œ๋‹ค.
ย 
์„ธ ๊ฐ€์ง€์˜ XSS ๊ณต๊ฒฉ์„ ์š”์•ฝํ•ด๋ณด๋ฉด ๋‹ค์Œ ํ‘œ์™€ ๊ฐ™๋‹ค.
๊ตฌ๋ถ„
Stored XSS
Reflected XSS
DOM-based XSS
ํŠน์ง•
์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ด ๊ณต๊ฒฉ
์‚ฌ์šฉ์ž ์ž…๋ ฅ์ด ์„œ๋ฒ„๋ฅผ ๊ฑฐ์ณ ๋‹ค์‹œ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ฐ˜์‚ฌ๋˜์–ด ๊ณต๊ฒฉ
ํด๋ผ์ด์–ธํŠธ ์ธก ์Šคํฌ๋ฆฝํŠธ์—์„œ DOM์„ ์กฐ์ž‘ํ•˜์—ฌ ๊ณต๊ฒฉ
๋ฐœ์ƒ ์œ„์น˜
์„œ๋ฒ„
์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด
ํด๋ผ์ด์–ธํŠธ
์ €์žฅ ์œ„์น˜
์„œ๋ฒ„์— ์ €์žฅ๋จ
์„œ๋ฒ„์— ์ €์žฅ๋˜์ง€ ์•Š์Œ
์„œ๋ฒ„์— ์ €์žฅ๋˜์ง€ ์•Š์Œ
๊ณต๊ฒฉ ์ง€์†์„ฑ
์ง€์†์ 
์ผํšŒ์„ฑ
์ผํšŒ์„ฑ ๋˜๋Š” ์ง€์†์ 
๊ณต๊ฒฉ ๋ฒ”์œ„
๋‹ค์ˆ˜ ์‚ฌ์šฉ์ž
ํŠน์ • ์‚ฌ์šฉ์ž
ํŠน์ • ์‚ฌ์šฉ์ž
์œ„ ์˜ˆ์‹œ๋“ค์€ ์„ค๋ช…์„ ๋•๊ธฐ ์œ„ํ•ด ๊ฐ€์ •ํ•œ ๊ฐ„๋‹จํ•œ XSS ๊ณต๊ฒฉ์˜ ์˜ˆ์‹œ์ด๋ฉฐ, ์‹ค์ œ XSS ๊ณต๊ฒฉ์€ ๋”์šฑ ๋ณต์žกํ•˜๊ณ  ๋‹ค์–‘ํ•œ ํ˜•ํƒœ๋กœ ์ด๋ฃจ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค.
ย 

(3) XSS ๋ฐœ์ƒ ๊ฒฝ์šฐ

1) ์ž…๋ ฅ ๊ฐ’์— ๋Œ€ํ•œ ๊ฒ€์ฆ ๋ถ€์กฑ

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

2) ์ถœ๋ ฅ ๊ฐ’์— ๋Œ€ํ•œ ์ธ์ฝ”๋”ฉ ๋ถ€์กฑ

์ถœ๋ ฅ ๊ฐ’์— ๋Œ€ํ•œ ์ธ์ฝ”๋”ฉ์ด ๋ถ€์กฑํ•  ๋•Œ์—๋„ ์ด๋Ÿฌํ•œ XSS ๊ณต๊ฒฉ์— ๋…ธ์ถœ๋  ์ˆ˜ ์žˆ๋‹ค. ์›น ํŽ˜์ด์ง€์— ์ถœ๋ ฅ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ์ธ์ฝ”๋”ฉํ•˜์ง€ ์•Š์œผ๋ฉด, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์Šคํฌ๋ฆฝํŠธ๋กœ ํ•ด์„ํ•˜์—ฌ ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.
๊ทธ๋Ÿฌ๋ฏ€๋กœ, XSS ๊ณต๊ฒฉ์„ ์˜ˆ๋ฐฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ž…๋ ฅ ๊ฐ’์— ๋Œ€ํ•œ ๊ฒ€์ฆ๊ณผ ์ถœ๋ ฅ ๊ฐ’์— ๋Œ€ํ•œ ์ธ์ฝ”๋”ฉ์ด ํ•„์ˆ˜์ ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ์•ผํ•œ๋‹ค.
ย 

(4) XSS ๋Œ€์ฑ… ๋ฐฉ๋ฒ•

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

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

2) ์ถœ๋ ฅ ๊ฐ’ ์ธ์ฝ”๋”ฉ

์ถœ๋ ฅ ๊ฐ’ ์ธ์ฝ”๋”ฉ์€ ์›น ํŽ˜์ด์ง€์— ์ถœ๋ ฅ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ HTML ์—”ํ‹ฐํ‹ฐ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์Šคํฌ๋ฆฝํŠธ๋กœ ํ•ด์„ํ•˜์ง€ ๋ชปํ•˜๋„๋ก ํ•˜๋Š” ๊ณผ์ •์ด๋‹ค. ์ถœ๋ ฅ ๊ฐ’์„ ์ธ์ฝ”๋”ฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค. ์ถœ๋ ฅ ๊ฐ’ ์ธ์ฝ”๋”ฉ์€ ์ž…๋ ฅ ๊ฐ’ ๊ฒ€์ฆ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ๋”์šฑ ๊ฐ•๋ ฅํ•œ ๋ณด์•ˆ ์ฒด๊ณ„๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค.
์ถœ๋ ฅ ๊ฐ’ ์ธ์ฝ”๋”ฉ ๋ฐฉ๋ฒ•
์ถœ๋ ฅ ๊ฐ’ ์ธ์ฝ”๋”ฉ ๋ฐฉ๋ฒ•
  • HTML ์—”ํ‹ฐํ‹ฐ: <, >, &, ', " ๋“ฑ์˜ ํŠน์ˆ˜ ๋ฌธ์ž๋ฅผ &lt;, &gt;, &amp;, &apos;, &quot;์™€ ๊ฐ™์€ HTML ์—”ํ‹ฐํ‹ฐ๋กœ ๋ณ€ํ™˜
    • <script>alert('XSS ๊ณต๊ฒฉ!');</script> โžก๏ธ&lt;script&gt;alert('XSS Attack!')&lt;/script&gt;
  • Context-aware escaping: ์ถœ๋ ฅ๋˜๋Š” ์œ„์น˜์— ๋”ฐ๋ผ ์ ์ ˆํ•œ ์ธ์ฝ”๋”ฉ ๋ฐฉ์‹์„ ์ ์šฉ
    • (์˜ˆ๋ฅผ ๋“ค์–ด, JavaScript ์ฝ”๋“œ ๋‚ด์—์„œ ์ถœ๋ ฅ๋˜๋Š” ๋ฐ์ดํ„ฐ๋Š” JavaScript ์—”ํ‹ฐํ‹ฐ๋กœ ์ธ์ฝ”๋”ฉ)
ย 
XSS ๊ณต๊ฒฉ์„ ์˜ˆ๋ฐฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ž…๋ ฅ ๊ฐ’ ๊ฒ€์ฆ, ์ถœ๋ ฅ ๊ฐ’ ์ธ์ฝ”๋”ฉ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ณด์•ˆ ์กฐ์น˜๋ฅผ ํ•จ๊ป˜ ์ ์šฉํ•ด์•ผ ํ•œ๋‹ค. ๋˜ํ•œ, ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ๋ถ€ํ„ฐ ๋ณด์•ˆ์„ ๊ณ ๋ คํ•˜๊ณ , ์ •๊ธฐ์ ์ธ ๋ณด์•ˆ ์ ๊ฒ€์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.