sql >> Database teknologi >  >> RDS >> Mysql

Hvilke tegn er faktisk i stand til at forårsage SQL-injektion i MySQL?

I betragtning af nedenstående linjer fra mysql_real_escape_string() manual :

SQL-injektion i MySQL burde ikke være mulig med disse specialtegn alene:\b \0 \n \r \t \Z .

String Literals manual angiver dog følgende, men de angivne årsager (eller ej) vedrører ikke SQL-injektion:

Ydermere, i en simpel test, uanset vejret, de ovennævnte specialtegn er undsluppet eller ej, gav MySQL samme resultater. Med andre ord havde MySQL ikke engang noget imod :

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

Ovenstående forespørgsel fungerede på samme måde for ikke-escapede og escapede versioner af de ovennævnte tegn som angivet nedenfor:

$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 og data brugt i den simple 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. Begrænsning af MySQL-forbindelser fra localhost for at forbedre sikkerheden

  2. Hvordan starter man spring-boot app uden at være afhængig af databasen?

  3. Hvordan kan jeg se live MySQL-forespørgsler?

  4. Brug ikke sp_depends i SQL Server (den er forældet)