Mysql
 sql >> Base de données >  >> RDS >> Mysql

Quels caractères sont réellement capables de provoquer une injection SQL dans MySQL ?

Considérant les lignes ci-dessous de mysql_real_escape_string() manuel :

L'injection SQL dans MySQL ne devrait pas être possible avec ces caractères spéciaux seuls :\b \0 \n \r \t \Z .

Cependant, le manuel String Literals indique ce qui suit, mais les raisons spécifiées (ou non) ne concernent pas l'injection SQL :

De plus , dans un test simple , indépendamment du temps que les caractères spéciaux listés ci - dessus soient échappés ou non , MySQL a donné les mêmes résultats . En d'autres termes, MySQL s'en fichait :

$query_sql = "SELECT * FROM `user` WHERE user = '$user'";

La requête ci-dessus a fonctionné de la même manière pour les versions non échappées et échappées des caractères répertoriés ci-dessus, comme indiqué ci-dessous :

$user = chr(8);     // Back Space
$user = chr(0);     // Null char
$user = chr(13);    // Carriage Return
$user = chr(9);     // Horizontal Tab
$user = chr(26);    // Substitute
$user = chr(92) .chr(8);    // Escaped Back Space
$user = chr(92) .chr(0);    // Escaped Null char
$user = chr(92) .chr(13);   // Escaped Carriage Return
$user = chr(92) .chr(9);    // Escaped Horizontal Tab
$user = chr(92) .chr(26);   // Escaped Substitute

Table de test et données utilisées dans le test simple :

-- Table Structure

CREATE TABLE IF NOT EXISTS `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user` varchar(10) CHARACTER SET utf8 NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

-- Table Data

INSERT INTO `user` ( `user` ) VALUES
( char( '8' ) ),
( char( '0' ) ),
( char( '10' ) ),
( char( '13' ) ),
( char( '9' ) ),
( char( '26' ) );