XSS(Å©·Î½º »çÀÌÆ® ½ºÅ©¸³ÆÃ) Ãë¾àÁ¡À» ÇØ°áÇÏ´Â ¹æ¹ý Áß Çϳª´Â »ç¿ëÀڷκÎÅÍ ÀԷ¹ÞÀº µ¥ÀÌÅ͸¦ ÀûÀýÇÏ°Ô ÇÊÅ͸µÇÏ°í, À̽ºÄÉÀÌÇÁ ó¸®ÇÏ´Â °ÍÀÔ´Ï´Ù. »ç¿ëÀÚ°¡ ÀÔ·ÂÇÑ µ¥ÀÌÅ͸¦ ±×´ë·Î À¥ ÆäÀÌÁö¿¡ ¹Ý¿µÇÒ °æ¿ì ¾ÇÀÇÀûÀÎ ½ºÅ©¸³Æ®°¡ ½ÇÇàµÉ ¼ö Àֱ⠶§¹®ÀÔ´Ï´Ù.
¾Æ·¡´Â °£´ÜÇÑ ¿¹½Ã·Î, »ç¿ëÀÚ ÀÔ·ÂÀ» ÇÊÅ͸µÇÏ°í À̽ºÄÉÀÌÇÁ ó¸®ÇÏ´Â ¹æ¹ýÀ» º¸¿©ÁÖ´Â ÄÚµåÀÔ´Ï´Ù. ÀÌ ¿¹½Ã´Â ¼¹ö »çÀ̵å(¿¹: PHP)¿¡¼ ó¸®ÇÏ´Â °æ¿ì¸¦ °¡Á¤ÇÕ´Ï´Ù. Ŭ¶óÀ̾ðÆ® »çÀ̵åÀÇ ÀԷ ó¸®¸¸À¸·Î´Â ÃæºÐÇÏÁö ¾ÊÀ» ¼ö ÀÖÀ¸´Ï, ¼¹ö »çÀ̵忡¼µµ ¹Ýµå½Ã °ËÁõÇÏ°í ó¸®ÇØ¾ß ÇÕ´Ï´Ù.
PHP ¿¹½Ã
function escapeInput($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data, ENT_QUOTES, 'UTF-8');
return $data;
}
$userInput = "";
$safeInput = escapeInput($userInput);
echo $safeInput;
ÀÚ¹Ù½ºÅ©¸³Æ®(Javascript) ¿¹½Ã
Ŭ¶óÀ̾ðÆ® »çÀ̵忡¼ »ç¿ëÀÚ ÀÔ·ÂÀ» DOM¿¡ Á÷Á¢ »ðÀÔÇÏ´Â °æ¿ì, innerText
³ª textContent
¼Ó¼ºÀ» »ç¿ëÇÏ¿© XSS Ãë¾àÁ¡À» ¿¹¹æÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ¹æ¹ýÀº ÀԷ°ªÀ» HTML·Î Çؼ®ÇÏÁö ¾Ê°í, ´Ü¼øÇÑ ÅؽºÆ®·Î Ãë±ÞÇÏ¿© »ðÀÔÇÕ´Ï´Ù.
document.getElementById("someElement").innerHTML = userInput;
document.getElementById("someElement").innerText = userInput;
ÀÌ ¹æ¹ý ¿Ü¿¡µµ ÄÜÅÙÃ÷ º¸¾È Á¤Ã¥(Content Security Policy, CSP)À» È°¿ëÇÏ¿© ½ºÅ©¸³Æ® ½ÇÇàÀ» Á¦ÇÑÇÏ´Â °Íµµ XSS °ø°ÝÀ» ¹æÁöÇÏ´Â µ¥ µµ¿òÀÌ µÉ ¼ö ÀÖ½À´Ï´Ù. CSP´Â À¥ ¼¹ö¿¡¼ HTTP Çì´õ¸¦ ¼³Á¤ÇÏ¿©, ÆäÀÌÁö¿¡¼ ½ÇÇàµÉ ¼ö ÀÖ´Â ½ºÅ©¸³Æ®ÀÇ Ãâó¸¦ Á¦ÇÑÇÕ´Ï´Ù.