XSS À¥ Ãë¾àÁ¡À» ÇØ°á ÇÏ´Â ÄÚµå Â¥Áà

[´ñ±Û¼ö ]
rank ÈĴ϶ûÂî´Ï¶û¢¾ 2024-02-10 (Åä) 00:18 Á¶È¸ : 85 Ãßõ : 5  Ãßõ
rank AIê

XSS(Å©·Î½º »çÀÌÆ® ½ºÅ©¸³ÆÃ) Ãë¾àÁ¡À» ÇØ°áÇÏ´Â ¹æ¹ý Áß Çϳª´Â »ç¿ëÀڷκÎÅÍ ÀԷ¹ÞÀº µ¥ÀÌÅ͸¦ ÀûÀýÇÏ°Ô ÇÊÅ͸µÇÏ°í, À̽ºÄÉÀÌÇÁ ó¸®ÇÏ´Â °ÍÀÔ´Ï´Ù. »ç¿ëÀÚ°¡ ÀÔ·ÂÇÑ µ¥ÀÌÅ͸¦ ±×´ë·Î À¥ ÆäÀÌÁö¿¡ ¹Ý¿µÇÒ °æ¿ì ¾ÇÀÇÀûÀÎ ½ºÅ©¸³Æ®°¡ ½ÇÇàµÉ ¼ö Àֱ⠶§¹®ÀÔ´Ï´Ù.

¾Æ·¡´Â °£´ÜÇÑ ¿¹½Ã·Î, »ç¿ëÀÚ ÀÔ·ÂÀ» ÇÊÅ͸µÇÏ°í À̽ºÄÉÀÌÇÁ ó¸®ÇÏ´Â ¹æ¹ýÀ» º¸¿©ÁÖ´Â ÄÚµåÀÔ´Ï´Ù. ÀÌ ¿¹½Ã´Â ¼­¹ö »çÀ̵å(¿¹: PHP)¿¡¼­ ó¸®ÇÏ´Â °æ¿ì¸¦ °¡Á¤ÇÕ´Ï´Ù. Ŭ¶óÀ̾ðÆ® »çÀ̵åÀÇ ÀԷ ó¸®¸¸À¸·Î´Â ÃæºÐÇÏÁö ¾ÊÀ» ¼ö ÀÖÀ¸´Ï, ¼­¹ö »çÀ̵忡¼­µµ ¹Ýµå½Ã °ËÁõÇÏ°í ó¸®ÇØ¾ß ÇÕ´Ï´Ù.

PHP ¿¹½Ã

function escapeInput($data) {
    $data = trim($data); // °ø¹é Á¦°Å
    $data = stripslashes($data); // ½½·¡½Ã Á¦°Å
    $data = htmlspecialchars($data, ENT_QUOTES, 'UTF-8'); // HTML Ư¼ö ¹®ÀÚ¸¦ À̽ºÄÉÀÌÇÁ ó¸®
    return $data;
}

// »ç¿ëÀÚ ÀԷ ó¸® ¿¹
$userInput = "";
$safeInput = escapeInput($userInput);
echo $safeInput; // "" ´ë½Å <script>alert('xss');</script> Ãâ·Â

ÀÚ¹Ù½ºÅ©¸³Æ®(Javascript) ¿¹½Ã

Ŭ¶óÀ̾ðÆ® »çÀ̵忡¼­ »ç¿ëÀÚ ÀÔ·ÂÀ» DOM¿¡ Á÷Á¢ »ðÀÔÇÏ´Â °æ¿ì, innerText³ª textContent ¼Ó¼ºÀ» »ç¿ëÇÏ¿© XSS Ãë¾àÁ¡À» ¿¹¹æÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ¹æ¹ýÀº ÀԷ°ªÀ» HTML·Î Çؼ®ÇÏÁö ¾Ê°í, ´Ü¼øÇÑ ÅؽºÆ®·Î Ãë±ÞÇÏ¿© »ðÀÔÇÕ´Ï´Ù.

// À߸øµÈ ¹æ¹ý: innerHTMLÀ» »ç¿ëÇÏ¿© »ç¿ëÀÚ ÀÔ·ÂÀ» DOM¿¡ »ðÀÔ
document.getElementById("someElement").innerHTML = userInput;

// ¿Ã¹Ù¸¥ ¹æ¹ý: innerText³ª textContent¸¦ »ç¿ëÇÏ¿© »ç¿ëÀÚ ÀÔ·ÂÀ» DOM¿¡ »ðÀÔ
document.getElementById("someElement").innerText = userInput;

ÀÌ ¹æ¹ý ¿Ü¿¡µµ ÄÜÅÙÃ÷ º¸¾È Á¤Ã¥(Content Security Policy, CSP)À» È°¿ëÇÏ¿© ½ºÅ©¸³Æ® ½ÇÇàÀ» Á¦ÇÑÇÏ´Â °Íµµ XSS °ø°ÝÀ» ¹æÁöÇÏ´Â µ¥ µµ¿òÀÌ µÉ ¼ö ÀÖ½À´Ï´Ù. CSP´Â À¥ ¼­¹ö¿¡¼­ HTTP Çì´õ¸¦ ¼³Á¤ÇÏ¿©, ÆäÀÌÁö¿¡¼­ ½ÇÇàµÉ ¼ö ÀÖ´Â ½ºÅ©¸³Æ®ÀÇ Ãâó¸¦ Á¦ÇÑÇÕ´Ï´Ù.

´ñ±Û 0°³
´ñ±Û¾²±â

 1  2  3  4  5  6  7  8  9  10  ´ÙÀ½

°øÀ¯Çϱâ

ÀÌÅä·£µå ·Î°í

°èÁ¤ ã±â ȸ¿ø°¡ÀÔ
¼Ò¼È·Î±×ÀÎ