sql >> Database >  >> RDS >> Mysql

Welke karakters kunnen eigenlijk SQL-injectie in MySQL veroorzaken?

Gezien de onderstaande regels van mysql_real_escape_string() handleiding :

SQL-injectie in MySQL zou niet mogelijk moeten zijn met alleen deze speciale tekens:\b \0 \n \r \t \Z .

De String Literals-handleiding vermeldt echter het volgende, maar de opgegeven redenen (of niet) hebben geen betrekking op SQL-injectie:

Bovendien leverde MySQL in een eenvoudige test, ongeacht het weer, de bovengenoemde speciale tekens al dan niet escaped op. Met andere woorden, MySQL vond het niet eens erg :

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

De bovenstaande zoekopdracht werkte op dezelfde manier voor niet-escaped en escaped-versies van de hierboven vermelde tekens, zoals hieronder weergegeven:

$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

Testtabel en gegevens gebruikt in de eenvoudige test:

-- 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' ) );


  1. Meerdere formulieren en één verwerkingspagina

  2. pdo voorbereide uitspraken met jokertekens

  3. Een lange tekenreeks invoegen in CLOB-gegevenstype in Oracle

  4. mySQL:Subquery naar array?