SecureReality ´Â "A Study in Scarlet - Exploiting Common Vulnerabilities in PHP" ¶ó´Â ¸Å¿ì Èï¹Ì·Î¿î ³í¹®À» ¹ßÇ¥ÇÏ¿´´Ù [Clowes 2001]. ÀÌ ³í¹®Àº PHP, ƯÈ÷ PHP 4.1.0 ÀÌÀü ¹öÀü¿¡¼ º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥À» ÀÛ¼ºÇϴµ¥ ÀÖ¾î¼ ´Ù¼ÒÀÇ ¹®Á¦µéÀ» ³íÀÇÇϰí ÀÖ´Ù. Clowes ´Â ``µðÆúÆ® PHP ¼³Á¤¿¡¼ º¸¾ÈÀûÀÎ PHP ¾ÖÇø®ÄÉÀ̼ÇÀ» ÀÛ¼ºÇÏ´Â °ÍÀº °¢ÀÚ ³ë·ÂÇÑ´Ù°í ÇÏ´õ¶óµµ ¸Å¿ì ¾î·Æ´Ù" °í °á·ÐÁö¾ú´Ù.
¸ðµç ¾ð¾î¿¡ º¸¾È ¹®Á¦°¡ ÀÖ´Ù°í ÇÏ´õ¶óµµ PHP ¿¡´Â PHP ¸¦ ´ëºÎºÐÀÇ ¾ð¾îµéº¸´Ù ºñº¸¾ÈÀûÀÌ°Ô ÇÏ´Â ÇѰ¡Áö Ưº°ÇÑ ¹®Á¦°¡ ÀÖ´Ù; ÀÌ´Â µ¥ÀÌŸ¸¦ À̸§°ø°£¿¡ ÀûÀçÇÏ´Â ¹æ½ÄÀÌ´Ù. µðÆúÆ®·Î PHP (¹öÀü 4.1.0 ÀÌÇÏ) ¿¡¼´Â À¥À» ÅëÇØ PHP ·Î º¸³»Áö´Â ¸ðµç ȯ°æ º¯¼ö ¹× °ªÀÌ ÀϹÝÀûÀÎ º¯¼öµéÀÌ ÀûÀçµÇ´Â µ¿ÀÏÇÑ À̸§°ø°£ (Àü¿ªº¯¼ö) ³»·Î ÀÚµ¿ÀûÀ¸·Î ÀûÀçµÈ´Ù - µû¶ó¼ °ø°ÝÀÚ´Â ÀÓÀÇÀÇ º¯¼ö¿¡ ÀÓÀÇÀÇ °ªÀ» ¼³Á¤ÇÒ ¼ö ÀÖÀ¸¸ç PHP ÇÁ·Î±×·¥ÀÌ ¸í½ÃÀûÀ¸·Î Àç¼³Á¤ÇÏÁö ¾Ê´Â´Ù¸é ÀÌ °ªÀÌ À¯ÁöµÈ´Ù. °Ô´Ù°¡ PHP ´Â óÀ½ ¿äûµÉ ¶§ µðÆúÆ® °ªÀ» °®´Â º¯¼ö¸¦ ÀÚµ¿ÀûÀ¸·Î »ý¼ºÇϴµ¥ µû¶ó¼ PHP ÇÁ·Î±×·¥ÀÌ º¯¼ö¸¦ ÃʱâÈÇÏÁö ¾Ê´Â °ÍÀÌ ÀϹÝÀûÀÌ´Ù. º¯¼ö ¼³Á¤À» ÇÏÁö ¾Ê´Â °æ¿ì PHP °¡ À̸¦ º¸°íÇÒ ¼ö´Â ÀÖÁö¸¸ µðÆúÆ®·Î ±×·¸°Ô ÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù - ÀÌ´Â ´Ü¼øÈ÷ ¿¡·¯ º¸°í·Î ÀÌ·¯ÇÑ ¿¡·¯¸¦ ¾ß±âÇÏ´Â ¿¹¿ÜÀûÀÎ ¹æ½ÄÀ» ¹ß°ßÇÑ °ø°ÝÀÚ¸¦ ¸·Áö ¸øÇÒ °ÍÀ½À» ÁÖ¸ñÇØ¶ó. µû¶ó¼ µðÆúÆ®·Î PHP ´Â ÇÁ·Î±×·¥ÀÌ °ø°ÝÀÚ¸¦ ¹«½ÃÇϱâ À§ÇØ Æ¯º°È÷ ÁÖÀǸ¦ ÇÏÁö ¾Ê´Â´Ù¸é °ø°ÝÀÚ°¡ ÇÁ·Î±×·¥³»ÀÇ ¸ðµç º¯¼ö °ªÀ» ¿ÏÀüÈ÷ Á¦¾îÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù. ÀÏ´Ü °ø°ÝÀÚ°¡ ÇÁ·Î±×·¥À» Á¦¾îÇÏ°Ô µÈ´Ù¸é ÀÌ·¯ÇÑ º¯¼ö¸¦ Àç¼³Á¤ÇÒ ¼ö ÀÖÀ¸¸ç µû¶ó¼ °¢ÀÚ ¾î¶² º¯¼ö(¸íÈ®ÇÏÁø ¾ÊÁö¸¸ Àû¾îµµ ÇѰ³ÀÇ º¯¼ö) ¸¦ Àç¼³Á¤ÇÏÁö ¸øÇÑ´Ù¸é PHP ÇÁ·Î±×·¥À» Ãë¾àÇÏ°Ô ¸¸µé ¼öµµ ÀÖ´Ù.
¿¹¸¦ µé¾î ´ÙÀ½ PHP ÇÁ·Î±×·¥ (Clowes ·ÎºÎÅÍÀÇ ¿¹Á¦) Àº ÆÐ½º¿öµå¸¦ ¾Ë°í ÀÖ´Â »ç¶÷µé¿¡°Ô ´ÜÁö ¾î¶² Áß¿äÇÑ Á¤º¸¸¦ ¾òµµ·Ï ÇÏÁö¸¸ °ø°ÝÀÚ´Â ±× »ç¶÷µéÀÇ À¥ ºê¶ó¿ìÀú¿¡ ``auth" ¸¦ ¼³Á¤ÇØ Àΰ¡ °Ë»ç¸¦ ÆÄ±«ÇÒ ¼ö ÀÖ´Ù:
<?php if ($pass == "hello") $auth = 1; ... if ($auth == 1) echo "some important information"; ?> |
ÀúÀÚ¿Í ¸¹Àº »ç¶÷µéÀº ÀÌ·¯ÇÑ Æ¯º°È÷ À§ÇèÇÑ ¹®Á¦¿¡ ´ëÇØ Ǫ³äÇØ¿ÔÁö¸¸ ÀÌ´Â PHP °¡ ³Î¸® »ç¿ëµÇ°í Àֱ⠶§¹®¿¡ Ưº°ÇÑ ¹®Á¦ÀÌ´Ù. °á±¹ »ç¿ëÇϱ⠽±´Ù°í ¾Ë·ÁÁø ¾ð¾î´Â º¸¾ÈÀûÀÎ ÇÁ·Î±×·¥ ÀÛ¼ºÀ» ´õ¿í ½±°ÔÇÑ´Ù. PHP ¿¡¼ ``register_globals" ¸¦ ``off" ·Î ¼³Á¤ÇÔÀ¸·Î½á ÀÌ·¯ÇÑ À߸øµÈ Ư¡À» ±ÝÁöÇÏ´Â °ÍÀº °¡´ÉÇÏÁö¸¸ µðÆúÆ®·Î 4.1.0 ÀÌ»óÀÇ PHP ¹öÀüÀº À̸¦ ``on" À¸·Î ¼³Á¤Çϸç 4.1.0 ÀÌÀü PHP ¹öÀüÀº register_globals ¸¦ off ¼³Á¤ÇÏ´Â °æ¿ì ´õ¿í »ç¿ëÇÏ±â ¾î·Æ´Ù. PHP °³¹ßÀÚµéÀº 4.1.0 ¹öÀü ¹ßÇ¥¿¡¼ ``´ÙÀ½ semi-major ¹öÀü¿¡¼´Â PHP ÀÇ ½Å±Ô ¼³Ä¡½Ã µðÆúÆ®·Î register_globals ¸¦ off ·Î ¼³Á¤ÇÒ °ÍÀÌ´Ù" ¶ó°í °øÇ¥Çß´Ù.
``register_globals" °¡ ``on" À¸·Î ¼³Á¤µÇ¾î ÀÖ´Â °æ¿ì Áß¿äÇÑ ÇÁ·Î±×·¥¿¡ ´ëÇØ PHP ´Â À§ÇèÇÏ´Ù - ºñº¸¾ÈÀûÀÎ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â °ÍÀÌ ³Ê¹«³ªµµ ½±´Ù. ±×·¯³ª ``register_globals" °¡ ÀÏ´Ü ``off" ·Î ¼³Á¤µÈ´Ù¸é PHP ´Â ÇÕ´çÇÑ °³¹ß ¾ð¾îÀÌ´Ù.
º¸¾ÈÀûÀÎ µðÆúÆ®´Â ``register_globals" ¸¦ ``off" ·Î ¼³Á¤ÇØ¾ß ÇÏ¸ç ¶ÇÇÑ »ç¿ëÀÚµéÀÌ ¿ÜºÎ Ãâó·ÎºÎÅÍ ¹Þ¾ÆµéÀÏ ¼ö ÀÖ´Â ÀÔ·ÂÀ» ÁöÁ¤Çϰí Á¦ÇÑÇÏ´Â °ÍÀ» ´õ¿í ½±°Ô ÇÏ´Â ¸î¸î ÇÔ¼ö¸¦ Æ÷ÇÔÇØ¾ß ÇÑ´Ù. ¾ÆÆÄÄ¡¿Í °°Àº À¥ ¼¹öµéÀº ÀÌ·¯ÇÑ º¸¾ÈÀûÀÎ PHP ¼³Ä¡¸¦ °³º°ÀûÀ¸·Î ¼³Á¤ÇÒ ¼ö ÀÖ´Ù. »ç¿ëÀÚµéÀÌ ¹Þ¾ÆµéÀÌ±æ ¿øÇÏ´Â ÀÔ·Â º¯¼ö¸¦ ¿°ÅÇϱ⠽±°Ô ÇÏ´Â ·çƾµéÀÌ PHP ¶óÀ̺귯¸®¿¡ ³õÀÏ ¼öµµ ÀÖ´Ù; ¸î¸î ÇÔ¼öµéÀº ÀÌ·¯ÇÑ º¯¼öµéÀÌ °¡Á®¾ßÇÏ´Â ÆÐÅÏ ¹×/¶Ç´Â ¿ä±¸µÇ´Â º¯¼ö ŸÀÔÀ» °Ë»çÇØ¾ß ÇÑ´Ù. ÀúÀÚ ÀǰßÀ¸·Î´Â PHP (register_globals °¡ on À¸·Î ¼³Á¤) ´Â ÇöÀç ÈǸ¢ÇÑ º¸¾ÈÀûÀÎ À¥ °³¹ß ¾ð¾î´Â ¾Æ´Ï´Ù. ±×·¯³ª ÇÕ´çÇÑ °³¹ß ¾ð¾î·Î »ç¿ëµÇµµ·Ï ½±°Ô ¼öÁ¤µÉ ¼ö ÀÖ´Ù.
PHP ¸¦ »ç¿ëÇϱâ·Î ÇÑ °æ¿ì ´ÙÀ½Àº ¾ó¸¶°£ÀÇ ÀúÀÚÀÇ Ãæ°íÀÌ´Ù (ÀÌ·¯ÇÑ Ãæ°í Áß ¸¹Àº ºÎºÐÀº Clowes °¡ Á¦±âÇÑ ¹®Á¦¿¡ ´ëóÇϱâ À§ÇÑ ¹æ¹ý¿¡ ±âÃÊÇÑ´Ù):
PHP ¼³Á¤ ¿É¼Ç ``register_globals" ¸¦ off ·Î ¼³Á¤Çϰí PHP 4.1.0 ÀÌ»ó ¹öÀüÀ» »ç¿ëÇØ¶ó. PHP 4.1.0 ¿¡´Â ¸î¸î Ưº°ÇÑ ¹è¿ÀÌ Ãß°¡µÇ¾î Àִµ¥, ƯÈ÷ $_REQUEST ´Â ``register_globals" °¡ off ·Î ¼³Á¤µÇ¾î ÀÖÀ» ¶§ PHP ·Î ¼ÒÇÁÆ®¿þ¾î¸¦ °³¹ßÇÏ´Â °ÍÀ» ´õ¿í °£´ÜÇÏ°Ô ÇÑ´Ù. register_globals ¸¦ ¼³Á¤ÇÔÀ¸·Î½á ´ëºÎºÐÀÇ ÀϹÝÀûÀÎ PHP °ø°ÝÀ» ¿ÏÀüÈ÷ Á¦°ÅÇÒ ¼ö Àִµ¥ ÀÌ·¯ÇÑ ¼³Á¤ÀÌ ½Å±Ô ¼³Ä¡½ÃÀÇ µðÆúÆ®°¡ µÉ ¶§±îÁö ÀÌ¿¡ ´ëºñÇØ¶ó. register_globals °¡ off ·Î ¼³Á¤µÇ¾î ÀÖ´Ù°í °¡Á¤ÇÏ´õ¶óµµ À̸¦ ¿ì¼±ÀûÀ¸·Î °Ë»çÇØ¾ß ÇÏ¸ç ±×·¸Áö ¾ÊÀº °æ¿ì´Â ÁßÁöÇØ¾ß ÇÑ´Ù - ÀÌ·¸°Ô ÇÔÀ¸·Î½á ÇÁ·Î±×·¥À» ¼³Ä¡ÇÑ »ç¶÷µéÀº ¹®Á¦°¡ ÀÖÀ½À» À绡¸® ¾Ë¾ÆÂ÷¸± °ÍÀÌ´Ù. ÀÌ·¯ÇÑ ¼³Á¤½Ã ÀÛµ¿ÇÏ´Â Á¦»ïÀÚ (third-party) ÀÇ PHP ¾ÖÇø®ÄÉÀ̼ÇÀº °ÅÀÇ ¾øÀ½À» ÁÖ¸ñÇØ¶ó. µû¶ó¼ ÇöÀç Àüü À¥ »çÀÌÆ®¿¡ ´ëÇØ À̸¦ off ·Î À¯ÁöÇϱâ´Â Èûµé´Ù. ¶ÇÇÑ ``register_globals" ¸¦ ±ÝÁöÇÏ´Â °ÍÀÌ Á¦»ïÀÚ¿¡ ÀÇÇØ È£½ºÆ®µÇ°í ÀÖÀ» ¶§´Â ´õ¿í´õ ¾î·Æ´Ù. ´ÜÁö ¸î¸î ÇÁ·Î±×·¥¿¡ ´ëÇØ¼¸¸ register_globals ¸¦ off ·Î ¼³Á¤ÇÏ´Â °ÍÀÌ °¡´ÉÇѵ¥ ¿¹¸¦ µé¾î ¾ÆÆÄÄ¡ÀÇ °æ¿ì PHP µð·ºÅ丮³»ÀÇ .htaccess ÆÄÀÏ¿¡ ´ÙÀ½À» »ðÀÔÇÒ ¼ö ÀÖ´Ù (¶Ç´Â À̸¦ ´õ¿í Á¦¾îÇϱâ À§ÇØ Directory Áö½Ã¸¦ »ç¿ëÇØ¶ó).
php_flag register_globals Off php_flag track_vars On |
±×·¯³ª ¾ÆÆÄÄ¡ À¥ ¼¹ö°¡ override ¸¦ Çã°¡Çϵµ·Ï ¼³Á¤µÇ¾î ÀÖÁö ¾Ê´Ù¸é .htaccess ÆÄÀÏ ÀÚü´Â ¹«½ÃµÈ´Ù; ´ë°³ ¾ÆÆÄÄ¡ Àü¿ª ¼³Á¤ÀÌ µÇ¾î ÀÖ¾î AllowOverride ´Â None À¸·Î ¼³Á¤µÇ¾î ÀÖ´Ù. µû¶ó¼ ¾ÆÆÄÄ¡ »ç¿ëÀÚ¸¦ À§ÇØ À¥ È£½ºÆÃ ¼ºñ½º°¡ ¼³Á¤ ÆÄÀÏ (´ë°³ /etc/http/conf/http.conf) ³»¿¡ ``AllowOver ¿É¼Ç" À» ¼³Á¤Çϵµ·Ï ÇÑ´Ù¸é ±×·¸°Ô ÇØ¶ó. ±× ÈÄ ÇÊ¿äÇÑ µ¥ÀÌŸ ÀûÀ縦 °£´ÜÇÏ°Ô Çϱâ À§ÇØ helper ÇÔ¼ö¸¦ ÀÛ¼ºÇضó.
³Î¸® »ç¿ëµÇ°í ÀÖ´Â PHP ¾ÖÇø®ÄÉÀ̼ÇÀ» ½ÇÇà½ÃŰ¸é¼ register_globals °¡ on À¸·Î ¼³Á¤µÉ ¼öµµ ÀÖ´Â ¼ÒÇÁÆ®¿þ¾î¸¦ °³¹ßÇØ¾ß ÇÑ´Ù¸é »ç¿ëÀÚ°¡ Á¦°øÇÏÁö ¾ÊÀº °ªÀ» ¾ðÁ¦³ª ¼³Á¤ÇÏÁö ¸¶¶ó. PHP µðÆúÆ® °ª¿¡ ÀÇÁ¸ÇÏÁö ¸»°í ¸í½ÃÀûÀ¸·Î ¼³Á¤ÇÏÁö ¾ÊÀº ¸ðµç º¯¼ö¸¦ ½Å·ÚÇÏÁö ¸¶¶ó. ¸ðµç ½ÃÀÛ ºÎºÐ (¿¹, ¸ðµç PHP ÇÁ·Î±×·¥ ¶Ç´Â PHP ¸¦ »ç¿ëÇÏ´Â HTML ÆÄÀÏ) ¿¡ ´ëÇØ À̸¦ ÇØ¾ß ÇÔÀ» ÁÖ¸ñÇØ¶ó. °¡Àå ÁÁÀº Á¢±Ù ¹æ¹ýÀº »ç¿ëÇÒ ¸ðµç º¯¼öµéÀ» °£´ÜÈ÷ Æò¹üÇÑ µðÆúÆ® °ª ( "" ¶Ç´Â 0) À¸·Î Àç¼³Á¤ÇÒ ¿¹Á¤ÀÌ¶óµµ À̵éÀ» ¼³Á¤ÇÔÀ¸·Î½á °¢°¢ÀÇ PHP ÇÁ·Î±×·¥À» ½ÃÀÛÇÏ´Â °ÍÀÌ´Ù. ÀÌ´Â Æ÷ÇÔµÊ ÆÄÀϳ»¿¡¼ ÂüÁ¶µÇ°Å³ª ¸ðµç ¶óÀ̺귯¸®³»¿¡¼ °úµµÀûÀÌ¶óµµ ÂüÁ¶µÇ´Â Àü¿ª º¯¼ö¸¦ Æ÷ÇÔÇÑ´Ù. ºÒÇàÈ÷µµ ÀڽŵéÀÌ È£ÃâÇÏ´Â ¸ðµç ÇÔ¼ö¿¡ ÀÇÇØ »ç¿ëµÉ ¼öµµ ÀÖ´Â ¸ðµç Àü¿ª º¯¼ö¸¦ Á¤È®È÷ ¾Ë°Å³ª ÀÌÇØÇÏ´Â °³¹ßÀÚµéÀº °ÅÀÇ ¾ø±â ¶§¹®¿¡ À§ÀÇ Ãæ°í´ë·Î ÇÏ´Â °ÍÀº ¾î·Æ´Ù. ÇѰ¡Áö ´ë¾ÈÀº »ç¿ëÀÚ°¡ µ¥ÀÌŸ¸¦ Á¦°øÇß´ÂÁö ¾Ë¾Æº¸±â À§ÇØ HTTP_GET_VARS, HTTP_POST_VARS, HTTP_COOKIE_VARS ¹× HTTP_POST_FILES ¸¦ °Ë»öÇÏ´Â °ÍÀÌ´Ù - ±×·¯³ª ´ë°³ ÇÁ·Î±×·¡¸ÓµéÀº ¸ðµç ¼Ò½º¸¦ °Ë»çÇÏ´Â °ÍÀ» Àؾî¹ö¸®´Âµ¥ PHP °¡ »õ·Î¿î µ¥ÀÌŸ ¼Ò½º (HTTP_POST_FILES ´Â ¿¹Àü PHP ¹öÀü¿¡´Â ¾ø´Ù) ¸¦ Ãß°¡ÇÑ´Ù¸é ¾î¶² ÀÏÀÌ ÀϾ°Ú´Â°¡.
¿¡·¯ º¸°í ¼öÁØÀ» E_ALL ·Î ¼³Á¤Çϰí Å×½ºÆÃ µ¿¾È¿¡ º¸°íµÈ ¸ðµç ¿¡·¯¸¦ ÇØ°áÇØ¶ó. ´Ù¸¥ ¹«¾ùº¸´Ùµµ ÀÌ´Â PHP ¿¡¼ÀÇ ÁÖ¿ä ¹®Á¦ÀÎ ÃʱâȵÇÁö ¾ÊÀº º¯¼öµé¿¡ ´ëÇØ ¿¡·¯¸¦ º¸°íÇÒ °ÍÀÌ´Ù. ÀÌ´Â ÇÁ·Î±×·¥À» µð¹ö±ëÇϴµ¥ µµ¿òÀ» Áֱ⠶§¹®¿¡ PHP ¸¦ »ç¿ëÇÏ·Á°í ÇÒ ¶§ ÁÁÀº °³³äÀÌ´Ù. ¿¡·¯ º¸°í ¼öÁØÀ» ¼³Á¤ÇÏ´Â ¹æ¹ýÀº ¸¹ÀÌ Àִµ¥ ÀÌ´Â ``php.ini" ÆÄÀÏ (Àü¿ª), ``.httpd.conf" ÆÄÀÏ (´ÜÀÏ È£½ºÆ®), ``.htaccess" ÆÄÀÏ (´ÙÁß È£½ºÆ®) ¶Ç´Â error-reporting ÇÔ¼ö¸¦ ÅëÇØ ½ºÅ©¸³Æ®ÀÇ »ó´ÜÀ» Æ÷ÇÔÇÑ´Ù. ÀúÀÚ´Â php.ini ÆÄÀÏ ¹× ½ºÅ©¸³Æ® »ó´Ü ¸ðµÎ¿¡ ¿¡·¯ º¸°í ¼öÁØÀ» ¼³Á¤Ç϶ó°í ±ÇÇÑ´Ù: ÀÌ·¸°Ô ÇÔÀ¸·Î½á (1) ½ºÅ©¸³Æ® »ó´Ü¿¡ ¸í·ÉÀ» ³Ö´Â °ÍÀ» ÀØ´Â °æ¿ì ¶Ç´Â (2) ÇÁ·Î±×·¥À» ´Ù¸¥ ¸Ó½ÅÀ¸·Î ¿Å±â°í php.ini ÆÄÀÏ º¯°æÀ» ÀØ´Â °æ¿ì º¸È£¹ÞÀ» ¼ö ÀÖ´Ù. µû¶ó¼ ¸ðµç PHP ÇÁ·Î±×·¥Àº ´ÙÀ½°ú °°ÀÌ ½ÃÀÛÇØ¾ß ÇÑ´Ù:
<?php error_reporting(E_ALL);?> |
ÀÌ·¯ÇÑ ¿¡·¯ º¸°í´Â °³¹ß½Ã ¼³Á¤µÇ¾î¾ß ÇÏ°í ½ÇÁ¦ »çÀÌÆ®¿¡¼ ½ÇÇàµÉ ¶§´Â ÇØÁ¦µÇ¾î¾ß ÇÑ´Ù°í (¿¡·¯ ¸Þ½ÃÁö°¡ °ø°ÝÀÚ¿¡ À¯¿ëÇÑ Á¤º¸¸¦ Á¦°øÇÒ ¼ö Àֱ⠶§¹®¿¡) ÁÖÀåÇÒ ¼öµµ ÀÖ´Ù. ¹®Á¦´Â ``½ÇÁ¦ »ç¿ë"½Ã ¿¡·¯ º¸°í ±â´ÉÀÌ ±ÝÁöµÈ´Ù¸é °³¹ß½Ã ±ÝÁöµÈä ³²¾ÆÀֱⰡ ½±´Ù´Â °ÍÀÌ´Ù. µû¶ó¼ ÀúÀÚ´Â ¿¡·¯ º¸°í ¼öÁØÀÌ ¼³Á¤µÉ ¼ö ÀÖ´Â ¸ðµç ÆÄÀÏ¿¡ ´Ü¼øÈ÷ À̸¦ Æ÷ÇÔÇÏ´Â °£´ÜÇÑ ¹æ¹ýÀ» Á¦¾ÈÇÑ´Ù.
ƯÈ÷ ¿ø°Ý ÆÄÀÏ Á¢±ÙÀ» ¿¹¹æÇϱâ À§ÇØ ÆÄÀÏ À̸§ »ý¼º¿¡ »ç¿ëµÇ´Â ¸ðµç »ç¿ëÀÚ Á¤º¸¸¦ ÇÊÅ͸µÇضó. PHP ´Â ´Ù¸¥ ¾ð¾î¿¡¼ ·ÎÄà ÆÄÀϸ¸À» ´ÜÁö ¿ÀÇÂÇÒ ¼ö ÀÖ´Â fopen() °ú °°Àº ÆÄÀÏ-¿ÀÇÁ´× ¸í·ÉÀÌ ´Ù¸¥ »çÀÌÆ®·ÎºÎÅÍÀÇ À¥ ¶Ç´Â ftp ¿äûÀ» ¼öÇàÇϴµ¥ »ç¿ëµÉ ¼ö ÀÖÀ½À» ÀǹÌÇÏ´Â ``remote filew" ±â´É¼ºÀÌ µðÆúÆ®·Î ¼³Á¤µÇ¾î ÀÖ´Ù.
¿¹Àü ½ºÅ¸ÀÏÀÇ ÆÄÀÏ ¾÷·Îµå¸¦ »ç¿ëÇÏÁö ¸¶¶ó; HTTP_POST_FILES ¹è¿°ú °ü·ÃµÈ ÇÔ¼ö¸¦ »ç¿ëÇØ¶ó. PHP ´Â Ưº°ÇÑ À̸§À» °®´Â ¾î¶² Àӽõð·ºÅ丮¿¡ ÆÄÀÏÀ» ¾÷·ÎµåÇÔÀ¸·Î½á ÆÄÀÏ ¾÷·Îµå¸¦ Áö¿øÇÑ´Ù. PHP ´Â ±× ÆÄÀÏ À̸§ÀÌ Á¸ÀçÇß´ø °÷À» °¡¸®Å°±â À§ÇØ ¿ø·¡ ¸¹Àº º¯¼öµéÀ» ¼³Á¤ÇÑ´Ù. ±×·¯³ª °ø°ÝÀÚ°¡ º¯¼ö À̸§ ¹× ±× °ªÀ» Á¦¾îÇÒ ¼ö Àֱ⠶§¹®¿¡ À̵éÀ» »ç¿ëÇØ Ä¿´Ù¶õ ¾Ç¿µÇâÀ» ¾ß±âÇÒ ¼ö ÀÖ´Ù. ´ë½Å ¾÷·ÎµåµÈ ÆÄÀÏ¿¡ Á¢±ÙÇϱâ À§Çؼ´Â ¾ðÁ¦³ª HTTP_POST_FILES ¹× °ü·ÃµÈ ÇÔ¼ö¸¦ »ç¿ëÇØ¶ó. ÀÌ °æ¿ì¶óµµ PHP ´Â °ø°ÝÀÚ°¡ ÀÓÀÇÀÇ ³»¿ëÀ» °®´Â ÆÄÀÏÀ» ¾÷·ÎµåÇÒ ¼ö ÀÖ°Ô Çϸç ÀÌ´Â ±× ÀÚü·Î À§ÇèÇÔÀ» ÁÖ¸ñÇØ¶ó.
´ÜÁö º¸È£µÈ ½ÃÀÛ ÆÄÀÏ (entry point) µé¸¸ ¹®¼ Æ®¸®³»¿¡ ³õ¾Æ¶ó; ¸ðµç ´Ù¸¥ ÄÚµå (´ëºÎºÐÀÇ ÄÚµåÀÏ °ÍÀÌ´Ù) ´Â ¹®¼ Æ®¸® ¿ÜºÎ¿¡ ³õ¾Æ¶ó. PHP ´Â ÀÌ ÁÖÁ¦¿¡ ÀÏ·ÃÀÇ À߸øµÈ Ãæ°í¸¦ ÇÏ¿´´Ù. ¿ø·¡ PHP »ç¿ëÀÚ´Â ``Æ÷ÇÔ (included)" ÆÄÀÏ¿¡ ``.inc" (include) È®ÀåÀÚ¸¦ »ç¿ëÇÑ´Ù°í °¡Á¤µÇ¾ú´Ù. ±×·¯³ª ÀÌ·¯ÇÑ Æ÷ÇÔ ÆÄÀÏÀº ´ë°³ ÆÐ½º¿öµå¿Í ´Ù¸¥ Á¤º¸¸¦ °®°í ÀÖÀ¸¸ç ¾ÆÆÄÄ¡´Â ``.inc" ÆÄÀÏÀÌ ¹®¼ Æ®¸®³»¿¡ ÀÖÀ» ¶§ ¿äûµÈ °æ¿ì ¿äûÀÚ¿¡°Ô ÀÌ ÆÄÀÏÀÇ ³»¿ëÀ» Á¦°øÇÒ °ÍÀÌ´Ù. µû¶ó¼ °³¹ßÀÚµéÀº ¸ðµç ÆÄÀÏÀÇ È®ÀåÀÚ¸¦ ``.php" ·Î ÇÏ¿´´Ù - ÀÌ´Â ÆÄÀÏ ³»¿ëÀÌ º¸¿©ÁöÁö ¾ÊÁö¸¸ entry point °¡ ÀüÇô ¾Æ´Ñ ÆÄÀÏÀÌ entry point °¡ µÇ¾î ¾Ç¿ëµÉ ¼ö ÀÖÀ½À» ÀǹÌÇÑ´Ù. Ãʱ⿡ ¾ð±ÞÇßµíÀÌ º¸ÅëÀÇ º¸¾È Ãæ°í°¡ ÃÖ¼±ÀÌ´Ù: ´ÜÁö º¸È£µÈ entry points ¸¸ ¹®¼ Æ®¸®³»¿¡ ³õ°í ¶óÀ̺귯¸® µîÀÇ ´Ù¸¥ ÄÚµå´Â ¹®¼ Æ®¸® ¿ÜºÎ¿¡ ³õ¾Æ¶ó. ¹®¼ Æ®¸®³»¿¡ ¾î¶°ÇÑ ``.inc" ÆÄÀϵµ À־ ¾ÈµÈ´Ù.
¼¼¼Ç ¸ÞÄ«´ÏÁòÀ» ÇÇÇØ¶ó. ``¼¼¼Ç" ¸ÞÄ«´ÏÁòÀº ¿µ±¸ÀûÀÎ µ¥ÀÌŸ¸¦ ÀúÀåÇϴµ¥ À¯¿ëÇÏÁö¸¸ ÇöÀç ±¸ÇöÀº ¸¹Àº ¹®Á¦¸¦ °®°í ÀÖ´Ù. ¿ì¼± µðÆúÆ®·Î ¼¼¼ÇÀº Àӽà ÆÄÀÏ¿¡ Á¤º¸¸¦ ÀúÀåÇÑ´Ù - µû¶ó¼ multi-hosted ½Ã½ºÅÛ¿¡ ÀÖ´Ù¸é ¸¹Àº °ø°ÝÀÚ¿¡ ³ëÃâµÉ ¼ö ÀÖÀ¸¸ç ºñ¹ÐÀÌ ´©¼³µÉ ¼ö ÀÖ´Ù. ÇöÀç multi-hosted µÇ°í ÀÖÁö ¾ÊÀº »ç¶÷ÀÏÁö¶óµµ ³ªÁß¿¡ multi-hosted µÇ°í ÀÖ´Â ÀÚ½ÅÀ» ¹ß°ßÇÒ ¼öµµ ÀÖ´Ù. ÀÌ·¯ÇÑ Á¤º¸¸¦ ÆÄÀϽýºÅÛ ´ë½Å µ¥ÀÌŸº£À̽º¿¡ ¿¬°á½Ãų ¼ö ÀÖÁö¸¸ multi-hosted µ¥ÀÌŸº£À̽ºÀÇ ´Ù¸¥ »ç¶÷µéÀÌ µ¿ÀÏÇÑ Çã°¡±ÇÀ» °®°í ±× µ¥ÀÌŸº£À̽º¿¡ Á¢±ÙÇÒ ¼ö ÀÖ´Ù¸é ¹®Á¦´Â µ¿ÀÏÇÏ´Ù. ÁÖÀÇÇÏÁö ¾Ê´Â °æ¿ì ¾Ö¸Å¸ðÈ£ÇÑ Á¡ÀÌ Àִµ¥ (``¼¼¼Ç°ªÀÎÁö ¾Æ´Ï¸é °ø°ÝÀÚÀÇ °ªÀÎÁö?") ÀÌ´Â °ø°ÝÀÚ¿¡°Ô ±×µéÀÌ ¼±ÅÃÇÑ ³»¿ëÀ» °®°í ÀÖ´Â ÆÄÀÏ ¶Ç´Â ۸¦ ¼¹ö¿¡ ³õÀ» ¼ö ÀÖµµ·Ï ÇÑ´Ù. ¶ÇÇÑ ÀÌ´Â °ø°ÝÀÚ°¡ ÀÌ·¯ÇÑ ÀÚ·á°¡ ³õÀÏ ÆÄÀÏ ¶Ç´Â ŰÀÇ À̸§À» ¾î´À Á¤µµ Á¦¾îÇÒ ¼ö ÀÖ°Ô ÇÑ´Ù.
¸ðµç ÀԷ¿¡ ´ëÇØ ´Ù¸¥ ¾ð¾î¿¡¼¿Í °°ÀÌ ¹Þ¾ÆµéÀÏ ¼ö ÀÖ´ÂÁö ÆÐÅϰúÀÇ ÀÏÄ¡ ¿©ºÎ¸¦ °Ë»çÇÏ°í ±× ÈÄ ¹®ÀÚ¿ÀÌ ¾Æ´Ñ µ¥ÀÌŸ¸¦ ¿ä±¸µÇ´Â ŸÀÔÀ¸·Î ¸ÂÃß±â À§ÇØ Å¸ÀÔ Ä³½ºÆÃÀ» »ç¿ëÇØ¶ó. (¿¹»óµÇ´Â) ÀÔ·ÂÀÇ ¼±ÅÃµÈ ¸®½ºÆ®¸¦ ½±°Ô °Ë»çÇϰí import Çϱâ À§ÇØ ``helper" ÇÔ¼ö¸¦ °³¹ßÇØ¶ó. PHP ´Â ºÎÁ¤È®ÇÏ°Ô Å¸ÀÔÀÌ Á¤ÇØÁú ¼ö Àִµ¥ (loosely-typed) ÀÌ´Â ¹®Á¦¸¦ ¾ß±âÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î ÀÔ·Â µ¥ÀÌŸ°¡ "000" °ªÀ» °®´Â´Ù¸é ÀÌ´Â "0" ¿Í °°Áö ¾ÊÀ¸¸ç ¶ÇÇÑ empty() µµ ¾Æ´Ï´Ù. À̴ ƯÈ÷ °áÇÕ (associative) ¹è¿ÀÇ °æ¿ì Áß¿äÇѵ¥ À̵éÀÇ À妽º°¡ ¹®ÀÚ¿À̱⠶§¹®ÀÌ´Ù; ÀÌ´Â $data["000"] °ú $data["0"] ÀÌ ´Ù¸£´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. ¿¹¸¦ µé¾î $bar °¡ double ŸÀÔÀÓÀ» È®ÀÎÇϱâ À§ÇØ (double ¿¡ ÀûÇÕÇÑ Æ÷¸ËÀ» °®´ÂÁö È®ÀÎÇÑ ÈÄ) ´ÙÀ½°ú °°ÀÌ ÇØ¶ó:
$bar = (double) $bar; |
À§ÇèÇÑ ÇÔ¼ö¿¡ ƯÈ÷ ÁÖÀÇÇØ¶ó. ÄÚµå ½ÇÇà ÇÔ¼ö (¿¹, require(), include(), eval(), preg_replace()), ¸í·É ½ÇÇà ÇÔ¼ö (¿¹, exec(),passthru(), backtick ¿¬»êÀÚ, system() °ú popen()) °ú ¿ÀÇ ÆÄÀÏ ÇÔ¼ö (¿¹, fopen(), readfile() °ú file()) µéÀÌ ÀÌ·¯ÇÑ PHP ÇÔ¼öµéÀÌ´Ù. ÀÌ´Â ¿ÏÀüÇÑ ¸ñ·ÏÀº ¾Æ´Ï´Ù!.
magic_quotes_gpc() ¸¦ »ç¿ëÇØ¶ó - ÀÌ´Â ¸¹Àº Á¾·ùÀÇ °ø°ÝÀ» Á¦°ÅÇÑ´Ù.