SQL Injection¤Î»ÅÁȤߤÈÂкö


¤Ï¤¸¤á¤Ë

ºÇ¶áWeb¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ÎÀȼåÀ­¤Ë¹¶·â¦¤Î´Ø¿´¤¬¹â¤Þ¤ê¡¢¿ô¿¤¯¤ÎWeb¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î¥»¥­¥å¥ê¥Æ¥£¥Û¡¼¥ë¤Ë¤è¤ë¾ðÊóϳ¤¨¤¤»ö·ï¤¬È¯À¸¤·¤Æ¤¤¤Þ¤¹¡£

¤½¤ÎÃæ¤Ç¤âSQL Injection¤ÏÀŲ¬¿·Ê¹¤ä¥ï¥³¡¼¥ëÅù¤ÇÏÃÂê¤È¤Ê¤ê¡¢Â礤¤ËÃíÌܤò½¸¤á¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤·¤¿¡£¤È¤³¤í¤¬¡¢Ì¤¤À¤ËÌäÂê¤ÎËܼÁ¤ò½½Ê¬¤ËÍý²ò¤·¤Æ¤¤¤Ê¤¤¤¿¤á¡¢Âкöϳ¤ì¤Ë¤è¤ê¡¢¾ðÊóϳ¤¨¤¤¤¬È¯À¸¤¹¤ë¤Ê¤É¤Î»ö·ï¤òµ¯¤³¤·¤Æ¤¤¤Þ¤¹¡£

¤½¤³¤Ç¡¢¤³¤Îʸ½ñ¤Ç¤Ï¡¢SQL Injection¤Î»ÅÁȤߤÈÂкö¤Ë¤Ä¤¤¤Æ²òÀ⤷¤Æ¤¤¤­¤Þ¤¹¡£


SQL Injection¤Î»ÅÁȤß

SQL Injection¤È¤Ï¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ë¤ª¤¤¤ÆRDB¤ÇǤ°Õ¤ÎÃͤò¸¡º÷¾ò·ï¡¢¹¹¿·ÆâÍÆÅù¤Ë»ÈÍѤ¹¤ë¾ì¹ç¤Ë¡¢Ç¤°Õ¤ÎSQLʸ¤ò¼Â¹Ô¤µ¤»¤Æ¤·¤Þ¤¦¼êË¡¤Ç¤¹¡£¤³¤ì¤Ï¡¢Web¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ë¸Â¤é¤º¡¢RDB¤ò»ÈÍѤ·¤Æ¤¤¤ë¥¯¥é¥¤¥¢¥ó¥È¡¦¥µ¡¼¥Ð¡¼·¿¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ç¤âȯÀ¸¤¹¤ë²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹¡£

¤³¤Î¹¶·â¼êË¡¤ò°­ÍѤ¹¤ë¤³¤È¤Ç¡¢¥æ¡¼¥¶¡¼¤Ï³«È¯¼Ô¡¢±¿ÍÑ´ÉÍý¼Ô¤¬Í½´ü¤·¤Ê¤¤¤è¤¦¤ÊSQLʸ¤òȯ¹Ô¤·¡¢RDB¤ò¼«Í³¤ËÁàºî¤¹¤ë¤³¤È¤¬½ÐÍè¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£¤Ä¤Þ¤ê¡¢¥Ç¡¼¥¿¤Îºï½ü¡¢Äɲᢲþ¤¶¤ó¡¢¼èÆÀ¤È¤¤¤Ã¤¿¤³¤È¤«¤é¡¢RDBMS¤Ë¤è¤Ã¤Æ¤ÏDB¥µ¡¼¥Ð¡¼¤ÇOS¥³¥Þ¥ó¥É¤¹¤é¼Â¹Ô¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤¤¤Þ¤¹¡£

ÆÃ¤Ëºòº£¤ÎWeb¥µ¡¼¥Ó¥¹¤Ç¤ÏÇØ¸å¤ËRDB¤¬¤ª¤«¤ì¡¢¸Ä¿Í¾ðÊó¤Ê¤É½ÅÍפʾðÊó¤¬RDB¤Ë³ÊǼ¤µ¤ì¤Æ¤¤¤ë¤³¤È¤¬Èó¾ï¤Ë¿¤¯¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£¤³¤Î¤¿¤á¡¢SQL Injection¤ËÂкö¤¹¤ë¤³¤È¤Ï½ÅÍפǤ¹¡£

¤Ç¤Ï¡¢²¿¸ÎSQL Injection¤È¤¤¤¦¤â¤Î¤¬È¯À¸¤·¤Æ¤·¤Þ¤¦¤Î¤Ç¤·¤ç¤¦¤«¡©¤½¤ì¤ò¸«¤Æ¤¤¤­¤Þ¤¹¡£

¿¤¯¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ç¤Ï¡¢¾ðÊó¤Î¸¡º÷¡¢Äɲᢺï½ü¡¢¹¹¿·¤È¤¤¤Ã¤¿½èÍý¤ò¹Ô¤¦ºÝ¤ËSQLʸ¤ò»È¤Ã¤ÆRDB¤òÁàºî¤·¤Þ¤¹¡£Î㤨¤Ð¡¢¸¡º÷¤ò¹Ô¤¦SQLʸ¤Ï°Ê²¼¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£

Îã1¡§
SELECT userID,userName from userTable where userID = 20060001;

userTable¤Î¥Æ¡¼¥Ö¥ë¹½Â¤

¹àÌÜ̾

°À­

userID

¿ôÃ͹àÌÜ

userName

ʸ»ú¹àÌÜ

¾åµ­SQLʸ¤Ç¤Ï¡¢¥Æ¡¼¥Ö¥ëuserTable¤«¤éuserID¤¬¡Ö20060001¡×¤Î¤â¤Î¤ò¸¡º÷¤·¡¢¤½¤Î¾ò·ï¤Ë¹ç¤¦userID¤ÈuserName¤ò¼èÆÀ¤·¤Þ¤¹¡£¤³¤Î¡Ö20060001¡×¤òÊѹ¹¤¹¤ë¤³¤È¤Ç¡¢Â¾¤Î¸¡º÷¾ò·ï¡¢Î㤨¤Ð¡¢userID¤¬¡Ö20060002¡×¤È¤¤¤Ã¤¿¥ì¥³¡¼¥É¤Î¥Ç¡¼¥¿¤ò¼èÆÀ¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£

Îã2¡§
SELECT userID,userName from userTable where userID = 20060002;

¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ç¤Ï¥æ¡¼¥¶¤¬¤É¤Î¤è¤¦¤Ê¸¡º÷¾ò·ï¤¬É¬ÍפȤʤ뤫ʬ¤«¤é¤Ê¤¤¤Î¤Ç¡¢¡Ö20060001¡×¤ÎÉôʬ¤ò¸ÇÄê²½¤»¤º¤ËÊÑ¿ô¤Ç¾ò·ï¤òÊѹ¹¤¹¤ë¤³¤È¤¬°ìÈÌŪ¤Ç¤¹¡£¤½¤Î¤È¤­¤Î¥×¥í¥°¥é¥àÎ㤬°Ê²¼¤ÎÎã3¤Ç¤¹¡£

Îã3¡§

10

ÅϤµ¤ì¤¿[¥Ç¡¼¥¿£±]¤òuser¤ËÂåÆþ¤¹¤ë

20

sql = "SELECT userID,userName from userTable where userID = " + user + ";"

30

[SQLʸ¡Ösql¡×¤Î¼Â¹Ô]

¾åµ­Îã3¤Ç[¥Ç¡¼¥¿£±]¤ÎÆâÍÆ¤¬Å¬ÀÚ¤ÊÃͤ«¤É¤¦¤«¤ÎȽÃǤ¬¤Ê¤µ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢SQL Injection¤¬È¯À¸¤·¤Þ¤¹¡£

Î㤨¤Ð¡¢userID¤Ï¿ôÃ͹àÌܤȤ·¤Æ¥Æ¡¼¥Ö¥ë¤ËÅÐÏ¿¤µ¤ì¤Æ¤¤¤Þ¤¹¤¬¡¢¥Ç¡¼¥¿1¤¬¿ôÃͤÀ¤±¤Î¥Ç¡¼¥¿¤«¤Î¥Á¥§¥Ã¥¯¤¬¤Ê¤µ¤ì¤Æ¤¤¤Ê¤«¤Ã¤¿¾ì¹ç¡¢¥Ç¡¼¥¿1¤Ëʸ»ú¤¬Æþ¤Ã¤Æ¤­¤Þ¤¹¡£

Îã4¡§

10

ÅϤµ¤ì¤¿"user1"¤òuser¤ËÂåÆþ¤¹¤ë¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡// user1¤¬¸¡º÷¾ò·ï¤È¤·¤ÆÆþÎϤµ¤ì¤¿

20

sql = "SELECT userID,userName from userTable where userID = " + user + ";"

30

[SQLʸ¡Ösql¡×¤Î¼Â¹Ô]

¤½¤¦¤¹¤ë¤È20¹Ô¤ÇÊÑ¿ôsql¤ÎÆâÍÆ¤Ï°Ê²¼¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£

Îã5¡§
SELECT userID,userName from userTable where userID = user1;

¤³¤ì¤ò¼Â¹Ô¤¹¤ë¤È¡¢¿ôÃ͹àÌܤǤ¢¤ëuserID¤òʸ»ú¥Ç¡¼¥¿¡Öuser1¡×¤Ç¸¡º÷¤·¤è¤¦¤È¤¹¤ë¤Î¤Ç¡¢SQL¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤¹¡£¤È¤³¤í¤¬¡¢¡Öuser1¡×¤ò¡Ö1 or 1 = 1 ¡×¤È¤¤¤¦Ê¸»úÎó¤ËÊѹ¹¤¹¤ë¤È¡¢20¹Ô¤ÇÊÑ¿ôsql¤ÎÆâÍÆ¤Ï°Ê²¼¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£

Îã6¡§
SELECT userID,userName from userTable where userID = 1 or 1 = 1;

¤³¤ÎSQLʸ¤ò¼Â¹Ô¤¹¤ë¤È¡¢1=1¤È¤¤¤¦¾ò·ï¤¬À®¤êΩ¤Ä¤Î¤Ç¡¢userTable¤ÎÁ´¤Æ¤Î¥ì¥³¡¼¥É¤¬½ÐÎϤµ¤ì¤Þ¤¹¡£¤³¤Î·ë²Ì¡¢ËÜÍè¼èÆÀ¤Ç¤­¤Æ¤Ï¤¤¤±¤Ê¤¤¥Ç¡¼¥¿¤ò¼èÆÀ¤¹¤ë¤³¤È¤¬²Äǽ¤È¤Ê¤ê¤Þ¤¹¡£¤³¤ì¤¬¡¢SQL Injection¤ÎºÇ¤â´Êñ¤Ê»ÅÁȤߤǤ¹¡£

¥ï¥³¡¼¥ëÅù¤Ç¤Ï¤³¤¦¤¤¤Ã¤¿¼êË¡¤ò»È¤Ã¤ÆËÜÍ踫¤¨¤Ê¤¤¤Ï¤º¤Î¥Ç¡¼¥¿¤ò¸«¤ë¤³¤È¤¬²Äǽ¤Ç¤·¤¿¡£

¤µ¤Æ¤³¤³¤Ç¡¢userID¤Ï¿ôÃ͹àÌܤʤΤǡ¢¿ôÃͤ·¤«¼è¤é¤Ê¤¤¤³¤È¤ò¥Á¥§¥Ã¥¯¤·¤Æ¤¤¤ì¤Ð¤³¤Î¥¿¥¤¥×¤ÎSQL Injection¤òËɤ²¤ë¤Ç¤·¤ç¤¦¤«¡©¤½¤³¤Ç¡¢¿ôÃ͹àÌܤΥÁ¥§¥Ã¥¯¤òSQLʸ¤ò¼Â¹Ô¤¹¤ëÁ°¤ËÆþ¤ì¤Æ¹Í¤¨¤Æ¤ß¤Þ¤¹¡£

Îã7¡§

10

ÅϤµ¤ì¤¿" 1 or 1 = 1 or 1 = 0"¤òuser¤ËÂåÆþ¤¹¤ë¡¡¡¡¡¡// ¡Ö 1 or 1 = 1 or 1 = 0¡×¤¬¸¡º÷¾ò·ï¤È¤·¤ÆÆþÎϤµ¤ì¤¿

15

if (user¤¬¿ôÃͰʳ°¤«¡©) then ¥¨¥é¡¼½èÍý

20

sql = "SELECT userID,userName from userTable where userID = " + user + ";"

30

[SQLʸ¡Ösql¡×¤Î¼Â¹Ô]

¤³¤Î¾ì¹ç¡¢15¹Ô¤Çuser¤¬¿ôÃͰʳ°¤¬Æþ¤Ã¤Æ¤¤¤ë¤¿¤á¡¢¥¨¥é¡¼½èÍý¤¬¹Ô¤ï¤ì¤Þ¤¹¡£¤³¤Î·ë²ÌͽÁÛ¤·¤Ê¤¤SQLʸ¡ÊÁ´¤Æ¤Î¥ì¥³¡¼¥É¤ò¸¡º÷·ë²Ì¤È¤·¤ÆÊÖ¤¹SQLʸ¡Ë¤¬¼Â¹Ô¤µ¤ì¤ë¤³¤È¤òËɤ°¤³¤È¤¬½ÐÍè¤Þ¤¹¡£

¤³¤Î¤è¤¦¤ËÆþÎϤµ¤ì¤¿¥Ç¡¼¥¿¤òŬÀڤ˥Á¥§¥Ã¥¯¤ò¹Ô¤¦¤³¤È¤ÇSQL Injection¤òËɤ°¤³¤È¤¬²Äǽ¤Ç¤¹¡£


SQL InjectionÂкö

¤Ç¤Ï¡¢¼ÂºÝ¤Ë¤É¤Î¤è¤¦¤ÊÂкö¤ò¤¹¤ì¤Ð¤è¤¤¤Î¤Ç¤·¤ç¤¦¤«¡©¤½¤ì¤ò¤³¤³¤Ç¤Ï¸«¤Æ¤¤¤­¤Þ¤¹¡£

¤Þ¤º¡¢¤â¤Ã¤È¤â¤è¤¤Âкö¤Ï¸À¸ì¡¢¥Õ¥ì¡¼¥à¥ï¡¼¥¯¤¬È÷¤¨¤Æ¤¤¤ë¥Ð¥¤¥ó¥É¥á¥«¥Ë¥º¥à¤òÍøÍѤ¹¤ëÊýË¡¤Ç¤¹¡£¤³¤ì¤òÍѤ¤¤ë¤È¸À¸ì¤ä¥Õ¥ì¡¼¥à¥ï¡¼¥¯¤¬¼«Æ°Åª¤Ë·¿¤ò¥Á¥§¥Ã¥¯¤·¡¢ÉÔŬÀÚ¤Êʸ»ú¤¬´Þ¤Þ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ë¤Ï¥¨¥¹¥±¡¼¥×½èÍý¤ò¹Ô¤Ã¤Æ¤¯¤ì¤Þ¤¹(⤷¡¢Á´¤Æ¤¬¤³¤ì¤Ç°ÂÁ´¤Ë¤Ê¤ë¤ï¤±¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£DB¤Ç»ÈÍѤ¹¤ëʸ»ú¥³¡¼¥É¤È¥Õ¥ì¡¼¥à¥ï¡¼¥¯¤Ç»ÈÍѤ·¤Æ¤¤¤ëʸ»ú¥³¡¼¥É¤¬°Û¤Ê¤ë¾ì¹ç¡¢Âкö¤Ë¤Ê¤é¤Ê¤¤¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£DB¤Ç»ÈÍѤ¹¤ëʸ»ú¥³¡¼¥É¤È¥Õ¥ì¡¼¥à¥ï¡¼¥¯¤Ç»ÈÍѤ¹¤ëʸ»ú¥³¡¼¥É¤ÏƱ°ì¤Ë¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£¡Ë¡£

¤·¤«¤·¡¢¤½¤Î¤è¤¦¤Ê»ÅÁȤߤ¬¤Ê¤¤¡¢¼ã¤·¤¯¤Ï²¿¤é¤«¤ÎÍýͳ¤Ç»ÈÍѤǤ­¤Ê¤¤¾ì¹ç¡¢ÉÔŬÀÚ¤Êʸ»ú¤ò¥¨¥¹¥±¡¼¥×½èÍý¤ò¹Ô¤¦É¬Íפ¬¤¢¤ê¤Þ¤¹¡£¤Þ¤¿¡¢WAF¡ÊWeb Application Firewall¡Ë¤ò»ÈÍѤ·¤Æ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ò¼é¤ë¾ì¹ç¤Ï¤ä¤Ï¤ê¡¢ÉÔŬÀÚ¤Êʸ»ú¤¬²¿¤«¤òÍý²ò¤·¤Æ¤¤¤Ê¤¤¤ÈËɸ椹¤ë¤³¤È¤¬½ÐÍè¤Þ¤»¤ó¡£

¤½¤Î¤¿¤á¡¢°ì¤Ä¤º¤Ä¥±¡¼¥¹¤ò¸«¤Æ¤¤¤­¤Þ¤·¤ç¤¦¡£


£±¡¥¿ôÃ͹àÌܤò¸¡º÷¾ò·ï¤Ë¤¹¤ë¾ì¹ç

hoe¤¬¿ôÃ͹àÌܤξì¹ç¡¢²¼µ­¤Î¤è¤¦¤ÊSQLʸ¤¬ÍøÍѤµ¤ì¤Þ¤¹¡£

­¡ SELECT * FROM hoge WHERE hoe = [¥Ç¡¼¥¿];
­¢ DELETE FROM hoge WHERE hoe = [¥Ç¡¼¥¿];
­£ UPDATE hoge SET hau = 'hauu' WHERE hoe = [¥Ç¡¼¥¿];

¤³¤ì¤é¤Î¾ì¹ç¡¢¹àÌÜhoe¤¬¿ôÃ͹àÌܤǤ¢¤ë¤¿¤á¡¢Àµ¾ï¤Ê¸¡º÷¾ò·ï¤Î¾ì¹ç¡¢[¥Ç¡¼¥¿]¤Ë¿ôÃͰʳ°¤¬Æþ¤ë¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¡£¤·¤¿¤¬¤Ã¤Æ¡¢¸¡º÷¾ò·ï¤È¤·¤Æ¿ôÃͰʳ°¤¬Æþ¤Ã¤Æ¤¯¤ë¤è¤¦¤Ê¤³¤È¤¬¤¢¤ì¤Ð¡¢ÌÀ¤é¤«¤Ë¥¨¥é¡¼¤È¤·¤Æ¤·¤Þ¤Ã¤Æ¤è¤¤¤Ï¤º¤Ç¤¹¡£

¤³¤Î°Ù¡¢¤³¤Î¥±¡¼¥¹¤Ç¤Ï[¥Ç¡¼¥¿]¤¬¿ôÃͤΤߤǹ½À®¤µ¤ì¤Æ¤¤¤ë¤³¤È¤ò³Îǧ¤·¤Þ¤¹¡£


£²¡¥¿ôÃ͹àÌܤΥǡ¼¥¿¤ò¹¹¿·¤¹¤ë¾ì¹ç

hoe¤¬¿ôÃ͹àÌܤξì¹ç¡¢²¼µ­¤Î¤è¤¦¤ÊSQLʸ¤¬ÍøÍѤµ¤ì¤Þ¤¹¡£

­¡ INSERT INTO hoge (hau,hoe) VALUE ('hauu',[¥Ç¡¼¥¿]);
­¢ UPDATE hoge SET hoe = [¥Ç¡¼¥¿] WHERE hau = 'hauu';

¤³¤ì¤é¤Î¾ì¹ç¤â¡¢¹àÌÜhoe¤¬¿ôÃ͹àÌܤǤ¢¤ë¤¿¤á¡¢ÂåÆþ¤Ç¤­¤ë¤â¤Î¤Ï¿ôÃͤΤߤȤʤê¤Þ¤¹¡£¤·¤¿¤¬¤Ã¤Æ¡¢¤³¤Î¥±¡¼¥¹¤â[¥Ç¡¼¥¿]¤Ë¿ôÃͰʳ°¤¬Æþ¤Ã¤Æ¤¯¤ë¤³¤È¤¬¤¢¤ì¤Ð¡¢ÌÀ¤é¤«¤Ë¥¨¥é¡¼¤È¤·¤Æ¤·¤Þ¤Ã¤Æ¤âÌäÂê¤Ê¤¤¤Ï¤º¤Ç¤¹¡£

¤³¤Î°Ù¡¢¤³¤Î¥±¡¼¥¹¤â£±¡¥¤ÈƱÍͤ˿ôÃͤΤߤÇ[¥Ç¡¼¥¿]¤¬¹½À®¤µ¤ì¤Æ¤¤¤ë¤³¤È¤ò³Îǧ¤·¤Þ¤¹¡£


£³¡¥Ê¸»ú¹àÌܤò¸¡º÷¾ò·ï¤Ë¤¹¤ë¾ì¹ç

hoe¤¬Ê¸»ú¹àÌܤξì¹ç¡¢²¼µ­¤Î¤è¤¦¤ÊSQLʸ¤¬ÍøÍѤµ¤ì¤Þ¤¹¡£

­¡ SELECT * FROM hoge WHERE hoe = '[¥Ç¡¼¥¿]';
­¢ SELECT * FROM hoge WHERE hoe = "[¥Ç¡¼¥¿]";
­£ DELETE FROM hoge WHERE hoe = '[¥Ç¡¼¥¿]';
­¤ DELETE FROM hoge WHERE hoe = "[¥Ç¡¼¥¿]";
­¥ UPDATE hoge SET hau = 'hauu' WHERE hoe = '[¥Ç¡¼¥¿]';
­¦ UPDATE hoge SET hau = 'hauu' WHERE hoe = "[¥Ç¡¼¥¿]";

¤³¤Î¾ì¹ç[¥Ç¡¼¥¿]¤Ë¤É¤Î¤è¤¦¤Êʸ»ú¤¬Æþ¤Ã¤Æ¤¯¤ë¤«¤ï¤«¤é¤Ê¤¤¤³¤È¤¬¤Û¤È¤ó¤É¤Ç¤¹¡£SQLʸ¤Ç¤Ïʸ»úÎó¤Î¶èÀÚ¤ê¤Ë¡Ö"¡×¡¢¡Ö'¡×¤¬»ÈÍѤµ¤ì¤Þ¤¹¡£¤³¤Î¤è¤¦¤Êʸ»ú¤¬¥Ç¡¼¥¿¤ËÆþ¤Ã¤Æ¤¯¤ë¤³¤È¤â¤¢¤ê¤Þ¤¹¡£Î㤨¤Ð¡¢[¥Ç¡¼¥¿]¤ÎÆâÍÆ¤¬¡Öaaa' or 'b'='b¡×¤Ç¤¢¤Ã¤¿¾ì¹ç¡¢­¡¤ÎSQLʸ¤Ï°Ê²¼¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£

­¡' SELECT * FROM hoge WHERE hoe = 'aaa' or 'a' = 'a';

ËÜÍè¤Ç¤¢¤ì¤Ð¡¢hoe¤¬¡Öaaa' or 'b' = 'b¡×¤Ç¤¢¤ë¤â¤Î¤ò¸¡º÷¤·¤¿¤¤¤Î¤Ç¤¹¤¬¡¢¼ÂºÝ¤Ë¸¡º÷¤µ¤ì¤ë¤Î¤Ï¥Æ¡¼¥Ö¥ëhoge¤Ë¤¢¤ëÁ´¤Æ¤Î¥Ç¡¼¥¿¤ò¸¡º÷·ë²Ì¤È¤·¤ÆÊÖ¤·¤Æ¤·¤Þ¤¤¤Þ¤¹¡£

¤³¤Î¤è¤¦¤Ë¤Þ¤Ã¤¿¤¯°Õ¿Þ¤·¤Ê¤¤SQLʸ¤¬½ÐÍè¤Æ¤·¤Þ¤¤¤Þ¤¹¡£

ËÜÍè˾¤à·ë²Ì¤òÆÀ¤ë¤¿¤á¤Ë¤Ï[¥Ç¡¼¥¿]¤ò¥¨¥¹¥±¡¼¥×½èÍý¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£SQLʸ¤Ç¤Ï¡Ö'¡×¤ò¡Ö''¡×¡¢¡Ö"¡×¤ò¡Ö""¡×¤Çɽ¤·¤Þ¤¹¡£¤³¤Î¤¿¤á¾åµ­Îã¤Ç¤Ï¡Öaaa'' or ''b''=''b¡×¤È¤¤¤¦¤è¤¦¤ËÊÑ´¹¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£¤³¤Î·ë²Ì­¡'¤Ï°Ê²¼¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£

­¡'' SELECT * FROM hoge WHERE hoe = 'aaa'' or ''a'' = ''a';

¤³¤Î·ë²ÌËÜÍè˾¤ó¤Ç¤¤¤¿¡Öaaa' or 'b' = 'b¡×¤òÆÀ¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£

¾åµ­°Ê³°¤Ë¤â¸¡º÷¾ò·ï¤ò¤¢¤¤¤Þ¤¤¤Ë¤·¤¿¤¤¾ì¹ç¤Ê¤É¤Ç¤Ï¡Ö=¡×¤ÎÂå¤ï¤ê¤Ë¡ÖLIKE¡×¤ò»ÈÍѤ·¤Þ¤¹¤¬¡¢¤³¤Î¤È¤­¡Ö%¡×¤ä¡Ö_¡×¤ò¥ï¥¤¥ë¥É¥«¡¼¥É¤È¤·¤Æ»ÈÍѤ¹¤ë¤Î¤Ç¤³¤¦¤¤¤Ã¤¿Ê¸»ú¤â¥¨¥¹¥±¡¼¥×½èÍý¤ò¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£


£´¡¥Ê¸»ú¹àÌܤΥǡ¼¥¿¤ò¹¹¿·¤¹¤ë¾ì¹ç

hoe¤¬Ê¸»ú¹àÌܤξì¹ç¡¢²¼µ­¤Î¤è¤¦¤ÊSQLʸ¤¬ÍøÍѤµ¤ì¤Þ¤¹¡£

­¡ INSERT INTO hoge (hau,hoe) VALUE ('hauu','[¥Ç¡¼¥¿]');
­¢ INSERT INTO hoge (hau,hoe) VALUE ("hauu","[¥Ç¡¼¥¿]");
­£ UPDATE hoge SET hoe = '[¥Ç¡¼¥¿]' WHERE hau = 'hauu';
­¤ UPDATE hoge SET hoe = "[¥Ç¡¼¥¿]" WHERE hau = "hauu";

¤³¤Î¾ì¹ç¤â£³¤ÈƱÍͤË[¥Ç¡¼¥¿]¤Ëʸ»úÎó¤Î¶èÀÚ¤êʸ»ú¡Ö"¡×¡¢¡Ö'¡×¤¬´Þ¤Þ¤ì¤Æ¤¤¤¿¤È¤­¡¢Í½Áۤ⤷¤Ê¤¤Æ°¤­¤ò¤¹¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£
Î㤨¤Ð¡¢­£¤Î¾ì¹ç¤Ë[¥Ç¡¼¥¿]¤¬¡Öaaa';--¡×¤Ç¤¢¤Ã¤¿¤È¤¹¤ë¤È¡¢°Ê²¼¤Î¤è¤¦¤ÊSQLʸ¤Ë¤Ê¤ê¤Þ¤¹¡£

­£' UPDATE hoge SET hoe = 'aaa';--' WHERE hau = 'hauu';

SQLʸ¤Ç¤Ï¡Ö--¡×°Ê¹ß¤Ï¥³¥á¥ó¥È¤È¤·¤Æ¤ß¤Ê¤µ¤ì¤ë¤¿¤á¡¢­£'¤Ïhoge¥Æ¡¼¥Ö¥ë¤ÎÁ´¤Æ¤Î¹àÌÜhoe¤¬¡Öaaa¡×¤ËÊÑ´¹¤µ¤ì¤Æ¤·¤Þ¤¤¤Þ¤¹¡£
¤·¤¿¤¬¤Ã¤Æ¡¢¡Ö"¡×¡¢¡Ö'¡×¤À¤±¤Ç¤Ê¤¯¡¢¡Ö--¡×¤Ê¤É¤âµ¤¤ò¤Ä¤±¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£


£µ¡¥¥Ç¡¼¥¿¤¬Stored Procedure¤Î°ú¿ô¤Ç¤¢¤ë¾ì¹ç

½èÍý¤ò¾¯¤·¤Ç¤âÁ᤯¤¹¤ë¡¢Ê£¿ô¤ÎSQLʸ¤¬°ìÅ٤˻Ȥï¤ì¤ëÅù¤Î¾ì¹ç¡¢Stored Procedure¤ò»È¤¦¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡£¤³¤Î¤è¤¦¤Ê¾ì¹ç¡¢°Ê²¼¤Î¤è¤¦¤ÊSQLʸ¤¬ÍѤ¤¤é¤ì¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£

­¡ exec hoehoe [¥Ç¡¼¥¿];
­¢ exec henyo "[¥Ç¡¼¥¿]";
­£ exec punyu '[¥Ç¡¼¥¿]';

¤³¤ì¤é¤â£´¤Þ¤Ç¤ÈƱÍͤËŬÀڤʥÁ¥§¥Ã¥¯¤ä¥¨¥¹¥±¡¼¥×½èÍý¤¬¤Ê¤µ¤ì¤Æ¤¤¤Ê¤¤¤Èͽ´ü¤·¤Ê¤¤SQLʸ¤ò¼Â¹Ô¤µ¤ì¤Æ¤·¤Þ¤¦¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£Î㤨¤Ð¡¢­¡¤Î[¥Ç¡¼¥¿]¤¬¡Ö1;delete from hoge;¡×¤Ç¤¢¤Ã¤¿¾ì¹ç¡¢°Ê²¼¤Î¤è¤¦¤ÊSQLʸ¤Ë¤Ê¤ê¤Þ¤¹¡£

­¡' exec hoehoe 1;delete from hoge;

¤³¤Î·ë²Ì¡¢Stored Procedure¡Öhoehoe¡×¤¬¼Â¹Ô¤µ¤ì¤¿¸å¡¢¥Æ¡¼¥Ö¥ëhoge¤Î¥ì¥³¡¼¥É¤¬Á´¤Æºï½ü¤µ¤ì¤Æ¤·¤Þ¤¤¤Þ¤¹¡£
¤³¤Î¤è¤¦¤Ë¡¢Å¬Àڤ˥ǡ¼¥¿¤Î¿ôÃͤ«¤É¤¦¤«¤Î¥Á¥§¥Ã¥¯¤¬¤Ê¤µ¤ì¤Æ¤¤¤Ê¤¤¤È¡¢ºîÀ®¼Ô¤¬°Õ¿Þ¤·¤Ê¤¤SQLʸ¤ò¼Â¹Ô¤·¤Æ¤·¤Þ¤¦¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£

¤³¤Î°Ù¡¢¥Ç¡¼¥¿¤Î¥Á¥§¥Ã¥¯¤ä¥¨¥¹¥±¡¼¥×½èÍý¤ò¤·¤Æ¤«¤éSQLʸ¤Ç»ÈÍѤ¹¤ë¤³¤È¤¬É¬¿Ü¤È¤Ê¤ê¤Þ¤¹¡£Ã¢¤·¡¢´í¸±¤Êʸ»ú¤¬´Þ¤Þ¤ì¤Æ¤¤¤Ê¤¤¤«¤É¤¦¤«¤Î¥Á¥§¥Ã¥¯¤ä¥¨¥¹¥±¡¼¥×½èÍý¤ÎºÝ¤Ë´í¸±¤Êʸ»ú¤ò½ü³°Ëô¤Ï̵³²²½¤¹¤ë¤è¤¦¤Ê¥í¥¸¥Ã¥¯¤Ç¹Ô¤Ã¤Æ¤¤¤ë¤È¡¢´í¸±¤Êʸ»ú¤Î¥Á¥§¥Ã¥¯¹àÌܤËϳ¤ì¤¬¤¢¤Ã¤¿¾ì¹ç¡¢ºîÀ®¼Ô¤¬°Õ¿Þ¤·¤Ê¤¤SQLʸ¤ò¼Â¹Ô¤·¤Æ¤·¤Þ¤¦²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹¡£¤½¤³¤Ç¡¢²Äǽ¤Ê¸Â¤ê¡¢»ÈÍѤǤ­¤ëʸ»ú°Ê³°¤¬´Þ¤Þ¤ì¤Æ¤¤¤Ê¤¤¤³¤È¡ÊÎ㤨¤Ð¡¢¿ôÃ͹àÌܤΥǡ¼¥¿¤Ë±Ñʸ»ú¤ä¡Ö+¡×¡¢¡Ö-¡×¤È¤¤¤Ã¤¿µ­¹æ¤¬´Þ¤Þ¤ì¤Æ¤¤¤Ê¤¤¤³¤È¤ä¡¢Ê¸»ú¹àÌܤDZÑʸ»ú¤·¤«ÆþÎϤµ¤ì¤Ê¤¤¤Èʬ¤«¤Ã¤Æ¤¤¤ë¾ì¹ç¤Ëµ­¹æ¤¬´Þ¤Þ¤ì¤Æ¤¤¤Ê¤¤¤³¤ÈÅù¡Ë¤ò³Îǧ¤¹¤ë¤è¤¦¤Ë¤·¤¿¤Û¤¦¤¬¤è¤ê°ÂÁ´¤Ë¤Ê¤ê¤Þ¤¹¡£


SQLʸ¤Ç´í¸±¤Êʸ»úÎó

¶ñÂÎŪ¤ËÌäÂ꤬¤¢¤ëʸ»úÎó¤È¤·¤Æ°Ê²¼¤Î¤è¤¦¤Ê¤â¤Î¤¬¤¢¤ê¤Þ¤¹¡£Ã¢¤·¤³¤ì¤é¤Ï¤¢¤¯¤Þ¤Ç´ðËÜŪ¤Ê¤â¤Î¤Ç¤¢¤ê¡¢³ÆRDBMS¤Ë°Í¸¤¹¤ë´í¸±¤Êʸ»úÎó¤¬Â¸ºß¤·¤Þ¤¹¡£

´í¸±¤Êʸ»úÎó

ʸ»úÎó¤Î»ý¤Ä°ÕÌ£

"

ʸ»úÎó¤Î¶èÀÚ¤ê

'

ʸ»úÎó¤Î¶èÀÚ¤ê

+

¿ôÃͱ黻

-

¿ôÃͱ黻

*

¿ôÃͱ黻

/

¿ôÃͱ黻

%

¥ï¥¤¥ë¥É¥«¡¼¥É

;

SQLʸ¤Î¶èÀÚ¤ê

--

¥³¥á¥ó¥È¤Î³«»Ï

( )

INSERTʸ¤ÇÃͤÎÂåÆþ¤Ê¤É¤Ë»ÈÍÑ

\

¥¨¥¹¥±¡¼¥×ʸ»ú¤È¤·¤Æ»ÈÍÑ


Âè1ÈÇ 2006/3/15 ºîÀ®
Âè2ÈÇ 2006/12/15 ʸ»ú¥³¡¼¥É¤Ë¤Ä¤¤¤Æ¤ÎÃí°Õ½ñ¤­¤òÄɲÃ
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡´í¸±¤Êʸ»ú¤Ë¡Ö\¡×¤òÄɲà Âè3ÈÇ 2007/4/4 ¿§¡¹½¤Àµ
Ikeda Masakazu
¥²¥¹¥È¥Ö¥Ã¥¯¤Ø
Secure Coding ¤ËÆþ¤í¤¦¡ª
FreeML ¡¡¥á¡¼¥ë¥¢¥É¥ì¥¹
¡¡