ȸ¿ø°¡ÀԡžÆÀ̵ð/ºñ¹øã±â
ȨÀ¸·Î

[php] SQL ÀÎÁ§¼Ç °ø°Ý
7³â Àü
SQL ÁúÀÇ °ø°ÝÀÌ Çö½ÇÀûÀ¸·Î ¸¹Àº ¹®Á¦Á¡À» °¡Á® ¿Â´Ù´Â Á¡¿¡ ÃֽŠ¹öÀü(MYSQL, MSSQL..)¿¡¼­ ÀÚüÀûÀ¸·Î ÇÊÅ͸µÇÏ°í ÀÖÁö¸¸, ±¸¹öÀü¿¡¼­ ±×·¸Áö ¸øÇÕ´Ï´Ù.

SQL ÁúÀǸ¦ ½Å·ÚÇÒ ¼ö ¾ø´Â ¸í·ÉÀ¸·Î ÀÎÇØ SQL ÁúÀÇ¿¡¼­ Á¢±Ù Á¦¾î¸¦ ¿ìȸÇÒ ¼ö ÀÖ¿©, ÀϹÝÀûÀÎ ÀÎÁõ°ú ÀÎÁõ È®ÀÎÀ» ¹«½ÃÇÏ°í, Á¾Á¾ SQL ÁúÀÇ°¡ »ç¿ëÀÚ°¡ °¡Áú ¼ö ¾ø´Â ±ÇÇÑÀ» °­Á¦ ÃëµæÇϱ⵵ ÇÕ´Ï´Ù.

SQL ¸í·É ÀÎÁ§¼ÇÀ̶õ? °ø°ÝÀÚ°¡ ¼û°ÜÁø µ¥ÀÌÅ͸¦ ³ëÃâÇϰųª, Ãë¾àÇÑ ºÎºÐÀ» µ¤¾î¾²°Å³ª, µ¥ÀÌÅͺ£À̽º¿¡ À§ÇèÇÑ ½Ã½ºÅÛ ´Ü°è ¸í·ÉÀ» ½ÇÇàÇÏ°Ô ÇÏ´Â SQL ¸í·ÉÀ» »ý¼ºÇϰųª ´ëüÇÏ´Â ±â¼ú¸¦ ¸»ÇÕ´Ï´Ù.

¾îÇø®ÄÉÀ̼ÇÀÌ »ç¿ëÀÚ ÀÔ·ÂÀ» ¹Þ¾Æ¼­, À̸¦ SQL ÁúÀǸ¦ ¸¸µé 떄 Á¤Àû Àμö·Î Á¶ÇÕÇÔÀ¸·Î½á ÀϾ´Ï´Ù. À¯°¨½º·´°Ôµµ, ¾Æ·¡ ¿¹Á¦µéÀº ½ÇÁ¦ÀÇ °ÍÀÔ´Ï´Ù.

Æнº¿öµå¸¦ ¾ò´Â ¹æ¹ý Áß Çϳª´Â °Ë»ö °á°ú ÆäÀÌÁö¸¦ ¿ìȸÇÏ´Â °ÍÀÔ´Ï´Ù. °ø°ÝÀÚ¿¡°Ô ÇÊ¿äÇÑ °ÍÀº º¯¼ö Áß Çϳª¶óµµ Á¦´ë·Î ´Ù·ïÁöÁö ¾ÊÀ¸¸é¼­ SQL ±¸¹®¿¡ »ç¿ëµÇ´Â °ÍÀÔ´Ï´Ù.

ÀÌ·¯ÇÑ ÇÊÅÍ´Â ÀϹÝÀûÀ¸·Î SELECT ±¸¹®¿¡¼­ WHERE, ORDER BY, LIMIT, OFFSET¿¡ »ç¿ëµË´Ï´Ù. µ¥ÀÌÅͺ£À̽º°¡ UNION ±¸Á¶¸¦ Áö¿øÇϸé, °ø°ÝÀÚ´Â ¿ø·¡ ÁúÀÇ¿¡ Àüü ÁúÀǸ¦ µ¡ºÙ¿©¼­ ÀÓÀÇÀÇ Å×ÀÌºí¿¡¼­ Æнº¿öµå¸¦ ¾òÀ» ¼ö ÀÖ½À´Ï´Ù. ¾ÏȣȭµÈ Æнº¿öµå Çʵ带 °­·ÂÈ÷ ±ÇÇÕ´Ï´Ù.


SQL ÁúÀÇ °ø°Ý


°ËÁõµÇÁö ¾Ê´Â º¯¼ö¸¦ ÀüÀû »ç¿ëÀÚÀÇ ½Å·Ú¸¦ ¹Ï°í ÇÊÅ͸µÇÏÁö ¾Ê´Â´Ù¸é, ¹®Á¦´Â Ä¿Áú ¼ö ¹Û¿¡ ¾ø½À´Ï´Ù. ´ÙÀ½ º¯¼ö¿¡ ÀÌ ÁúÀÇ('¿Í --·Î..)°¡ $query ¿¡¼­ »ç¿ëÇÏ´Â º¯¼ö Áß Çϳª¿¡ ÇÒ´çµÇ¸é, ¹®Á¦´Â Ä¿Áú ¼ö ¹Û¿¡ ¾ø½À´Ï´Ù.

¿¹Á¦ (ex #1

<?php
$query  = "SELECT id, name, inserted, size FROM products
                  WHERE size = '$size'
                  ORDER BY $order LIMIT $limit, $offset;";
$result = mysql_query($query);
?>

´ÙÀ½ ÁúÀÇ·Î ºñ¹Ð¹øÈ£¾øÀÌ ´©±¸³ª Á¢¼ÓÀÌ °¡´ÉÇÏ°Ô º¯ÁúµÇ¾î ¹ö¸³´Ï´Ù.

¿¹Á¦ (ex #2
<?php
$_POST['username'] = 'aidan';
$_POST['password'] = "' OR ''='";

$query = "SELECT * FROM users WHERE user='{$_POST['username']}'
            AND password='{$_POST['password']}'";
mysql_query($query);

echo $query;
// °á°ú: SELECT * FROM users WHERE user='aidan' AND password='' OR ''=''
?>

SQL UPDATEµµ °ø°Ý¹ÞÀ» ¼ö Àִµ¥, ÀÌ·± ÁúÀǸ¦ ¿ÏÀüÇÑ »õ ÁúÀǸ¦ µ¡ºÙÀÏ ¼ö ÀÖ½À´Ï´Ù. ¶ÇÇÑ °ø°ÝÀÚ°¡ SET ÀýÀ» ´Ù·ê ¼öµµ ÀÖ½À´Ï´Ù. ÀÌ °æ¿ì ÁúÀǸ¦ ¼º°øÀûÀ¸·Î º¯°æÇϱâ À§ÇÏ¿© ÀϺΠ½ºÅ°¸¶ Á¤º¸¸¦ °¡Áö°í ÀÖ¾î¾ß ÇÕ´Ï´Ù.

¿¹Á¦ (ex #3
<?php
$query = "UPDATE usertable SET pwd='$pwd' WHERE uid='$uid';";
?>

¾ÇÀÇÀûÀÎ »ç¿ëÀÚ°¡ $uid ¿¡ ' or uid like'%admin'; -- °ªÀ» ³Ö¾î¼­ °ü¸®ÀÚ Æнº¿öµå¸¦ º¯°æÇϰųª, $pwd ¿¡ "hehehe', admin='yes', trusted=100 "(¸¶Áö¸· °ø¹é Æ÷ÇÔ)À» ¼³Á¤ÇÏ¿© ±ÇÇÑÀ» ¾òÀ» ¼öµµ ÀÖ½À´Ï´Ù.

¿¹Á¦ (ex #4
<?php
// $uid == ' or uid like'%admin%'; --
$query = "UPDATE usertable SET pwd='...' WHERE uid='' or uid like
'%admin%'; --";

// $pwd == "hehehe', admin='yes', trusted=100 "
$query = "UPDATE usertable SET pwd='hehehe', admin='yes', trusted=100
WHERE ...;";
?>

µ¥ÀÌÅͺ£À̽º È£½ºÆ®ÀÇ OS µî±Þ ¸í·É¿¡ Á¢±ÙÇÏ´Â ¹®Á¦½Ã µÉ ¿¹Á¦ÀÔ´Ï´Ù.

¿¹Á¦ (ex #5
<?php
$query  = "SELECT * FROM products WHERE id LIKE '%$prod%'";
$result = mssql_query($query);
?>

°ø°ÝÀÚ°¡ $prod¿¡ a%' exec master..xp_cmdshell 'net user test testpass /ADD' -- °ªÀ» Á¦ÃâÇϸé, $query´Â:

¿¹Á¦ (ex #6
<?php
$query  = "SELECT * FROM products
             WHERE id LIKE '%a%'
             exec master..xp_cmdshell 'net user test testpass /ADD'--";
$result = mssql_query($query);
?>

ÀÌ·¯ÇÑ °ø°ÝÀº ÁÖ·Î º¸¾ÈÀ» ¿°µÎ¿¡ µÎÁö ¾Ê°í, ¾²¿©Áø ÄÚµå Ãë¾àÁ¡¿¡¼­ ¹ß»ýÇÕ´Ï´Ù. ¾î¶°ÇÑ ÀԷµµ ¹Ï¾î¼­´Â ¾ÈµÇ¸ç, ÃֽŠ¹öÀüÀÌ¶óµµ Çѹø´õ ÇÊÅ͸µÇØ ÁÖ¾î¾ß ÇÕ´Ï´Ù.

ƯÈ÷ Ŭ¶óÀ̾ðÆ®Ãø¿¡¼­ ¿À´Â ÀÔ·ÂÀº ¹Ï¾î¼­´Â ¾ÈµË´Ï´Ù. select, hidden input Çʵå, ÄíÅ°µµ ¸¶Âù°¡ÁöÀÔ´Ï´Ù. ù ¹ø°, µÎ ¹ø° ¿¹Á¦¿¡¼­ ±×·¯ÇÑ ÁúÀÇ°¡ Å« ¹®Á¦¸¦ ÀÏÀ¸Å³ ¼ö ÀÖÀ½À» º¸¿©ÁÖ°í ÀÖ½À´Ï´Ù.
SQL ÀÎÁ§¼Ç ȸÇÇ


´ÙÀ½Àº ¾ÈÀüÇÑ ÁúÀÇ ¿¹Á¦°¡ µË´Ï´Ù.

¿¹Á¦ (ex #7

<?php
settype($offset, 'integer');
$query = "SELECT id, name FROM products ORDER BY name LIMIT 20 OFFSET
               $offset;";

$query = sprintf("SELECT id, name FROM products ORDER BY
                    name LIMIT 20 OFFSET %d;", $offset);
?>

ÀÌ·¯ÇÑ ¹®Á¦¸¦ ȸÇÇÇϱâ À§ÇØ ¾ÈÀüÇÑ ¹æ¹ýÀ¸·Î ¹®ÀÚ¿­ ȸÇÇ ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â °ÍÀε¥, mysql_real_escape_string() °¡ ±×°ÍÀÔ´Ï´Ù. mysql_real_escape_string ´Â mysql_query ¿¡¼­ Ư¼ö ¹®ÀÚ¿­À» À̽ºÄÉÀÌÇÁÇϱâ À§ÇØ »ç¿ëµÇ¸ç, ±×·¯¹Ç·Î SQL ÀÎÁ§¼Ç °ø°ÝÀÌ µ¿ÀÛÇÏÁö ¾Ê°í ÁúÀÇ°¡ Á¤È®ÇÏ°Ô ½ÇÇàµÉ °ÍÀÔ´Ï´Ù.

¿¹Á¦ (ex #8
<?php
if (isset($_POST['product_name']) &&
       isset($_POST['product_description']) &&
       isset($_POST['user_id'])) {
    // Á¢¼Ó
    $link = mysql_connect(
      'mysql_host',
      'mysql_user',
      'mysql_password'
    );
    if(!is_resource($link)) {
        echo "¼­¹ö Á¢¼Ó ½ÇÆÐ\n";
        // ... ¿À·ù¸¦ ÀûÀýÈ÷ ±â·Ï
    } else {
        // ONÀÏ °æ¿ì magic_quotes_gpc/magic_quotes_sybase È¿°ú Á¦°Å
        if(get_magic_quotes_gpc()) {
            $product_name        =
                stripslashes($_POST['product_name']);
            $product_description =
                stripslashes($_POST['product_description']);
        } else {
            $product_name        = $_POST['product_name'];
            $product_description = $_POST['product_description'];
        }
        // ¾ÈÀüÇÑ ÁúÀÇ ¸¸µé±â
        $query = sprintf("INSERT INTO products (
                          `name`, `description`, `user_id`)
                           VALUES ('%s', '%s', %d)",
               mysql_real_escape_string($product_name, $link),
               mysql_real_escape_string($product_description, $link),
               $_POST['user_id']);

        mysql_query($query, $link);

        if (mysql_affected_rows($link) > 0) {
            echo "Product inserted\n";
        }
    }
} else {
    echo "Fill the form property\n";
}
?>


¾Æ´Ï¸é addslashes() ¿Í str_replace() ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼öµµ ÀÖ½À´Ï´Ù. addslashes() ´Â µ¥ÀÌÅͺ£À̽º ÁúÀÇ µî¿¡¼­ ó¸®ÇÒ ÇÊ¿ä°¡ ÀÖ´Â ¹®ÀÚ ¾Õ¿¡ ¹é½½·¡½Ã¸¦ ºÙÀÎ ¹®ÀÚ¿­À» ¹ÝȯÇÕ´Ï´Ù. ÀÌ ¹®ÀÚµéÀº ÀÛÀº µû¿ÈÇ¥('), Å« µû¿ÈÇ¥("), ¹é½½·¡½Ã(\), NUL(NULL ¹ÙÀÌÆ®)ÀÔ´Ï´Ù.

addslashes()¸¦ »ç¿ëÇÏ´Â ´ëÇ¥ÀûÀÎ ¿¹´Â µ¥ÀÌÅͺ£À̽º¿¡ µ¥ÀÌÅ͸¦ ³ÖÀ» ¶§ ÀÔ´Ï´Ù. ¿¹¸¦ µé¾î, µ¥ÀÌÅͺ£À̽º¿¡ O'reilly ¶ó´Â À̸§À» ³ÖÀ¸·Á°í ÇÒ¶§, À̽ºÄÉÀÌÇÁÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. ´ëºÎºÐÀÇ µ¥ÀÌÅͺ£À̽º´Â \À» »ç¿ëÇϱ⿡ O\'reilly°¡ µÇ¾î¾ß ÇÕ´Ï´Ù. ÀÌ µ¥ÀÌÅ͸¦ µ¥ÀÌÅͺ£À̽º¿¡ ³ÖÀ¸¸é Ãß°¡ÇÑ \Àº ÀúÀåµÇÁö ¾Ê½À´Ï´Ù.

¿¹Á¦ (ex #9
<?php
$str = "Is your name O'reilly?";

// Ãâ·Â: Is your name O\'reilly?
echo addslashes($str);
?>
ÃßõÃßõ : 261 Ãßõ ¸ñ·Ï
¹øÈ£ Á¦¸ñ
2,855
HTML <Audio> »ç¿ë¹ý
2,854
À©µµ¿ì10 ½Ã½ºÅÛÆÄÀÏ ¼Õ»ó (ÃÊ°£´Ü ¿À·ù º¹±¸¹æ¹ý!!)
2,853
PHP ÆÄÀÏ Á¸Àç ¿©ºÎ ÆľÇÇϱâ(·ÎÄà ÆÄÀÏ Á¸Àç ¹× ¿ø°ÝÁö ÆÄÀÏ Á¸Àç)
2,852
[CSS] ¹Ú½º ¼¼·Î °¡¿îµ¥ Áß¾Ó Á¤·Ä 6°¡Áö
2,851
CSS Layout ¼öÆò & ¼öÁ÷ Á¤·Ä
2,850
¿©·¯ µµ¸ÞÀÎµé °£ ÄíÅ° °øÀ¯Çϱâ
2,849
ÅÂ±× »çÀÌ¿¡ ÀÖ´Â ÅؽºÆ®¸¦ ÃßÃâ
2,848
[JQuery] textbox focus on offÀ϶§ ¼ýÀÚ ÄÞ¸¶ º¸¿©ÁÖ±â
2,847
ÄíÅ° »ý¼º,°¡Á®¿À±â,»èÁ¦
2,846
»ç¿ëÀÚ ÇÔ¼ö ¸ðÀ½
2,845
¸¶¿ì½º,Å°º¸µå Á¦ÇÑ ( ¿À¸¥ÂÊŬ¸¯,µå·¡±×,¿µ¿ª¼±Åõî..)
2,844
[HTML5] <video> - DOMÀ¸·Î Á¦¾îÇϱâ
2,843
HTML5 video ű׿¡¼­ ¿µ»ó Á¿ì¹ÝÀü
2,842
PHP - ƯÁ¤ ÅÂ±× ¹× ¹®ÀÚ¿­ ÃßÃâ, Á¦°Å
2,841
[PHP] define°ú definedÀÇ Â÷ÀÌ
2,840
¿ìŬ¸¯ ¿Ïº®Â÷´Ü ½ºÅ©¸³Æ®
2,839
iframe ³ôÀÌ 100% ¸ÂÃß±â
2,838
curl ÇÔ¼ö¸¦ ÀÌ¿ëÇÑ HTTP REFERER º¯°æ
2,837
À©µµ¿ì10 ½Ã½ºÅÛ ÆÄÀÏ ¹× Dism °Ë»ç
2,836
ÅؽºÆ® ÁٹٲÞ, ±ÛÀÚÀÚ¸£±â CSS
2,835
jQuery Mobile¿¡¼­ À¯¿ëÇÑ ÄÚµå 10°¡Áö.
2,834
[PHP] dirname()ÇÔ¼ö¿Í $_SERVER °ü·Ã »ó¼öµé
2,833
[PHP] ÆÄÀÏ Å©±â, »çÀÌÁî ºÒ·¯¿À´Â ÇÔ¼ö, filesize()
2,832
[jQuery] jQuery Quick API
2,831
[ transition ] ¸µÅ© hover »ö»ó º¯È­ ¼Óµµ Á¶Àý
2,830
PHP 5.3.0 ¿¡¼­ »ç¶óÁø ÇÔ¼öµé ´ëü
2,829
¾î¶² ÆÄÀϵéÀÌ include ³ª require µÇ¾ú´ÂÁö È®ÀÎÇÏ´Â ÇÔ¼ö(get_included_files)
2,828
PHP ³¯Â¥ Çü½Ä ¹× °è»êÇϱâ(³¯Â¥ ´õÇÏ°í »©±â)
2,827
jQuery Mobile¿¡¼­ À¯¿ëÇÑ ÄÚµå 10°¡Áö.
2,826
°ªÀÌ ¹è¿­ ¾È¿¡ Á¸ÀçÇÏ´ÂÁö È®ÀÎÇÏ´Â in_arrayÇÔ¼ö
¸ñ·Ï
¹ÂÁ÷Æ®·ÎÆ® ºÎ»ê±¤¿ª½Ã ºÎ»êÁø±¸ °¡¾ßµ¿ ¤Ó °³ÀÎÁ¤º¸Ãë±Þ¹æħ
Copyright ¨Ï musictrot All rights reserved.