Mysql
 sql >> база данни >  >> RDS >> Mysql

Кои символи всъщност са способни да причинят SQL инжекция в MySQL?

Като се имат предвид редовете по-долу от mysql_real_escape_string() ръководство :

SQL инжектирането в MySQL не трябва да е възможно само с тези специални символи:\b \0 \n \r \t \Z .

Въпреки това ръководството за String Literals посочва следното, но посочените причини (или не) не се отнасят до SQL инжекция:

Освен това, при прост тест, независимо от времето, изброените по-горе специални символи са екранирани или не, MySQL даде същите резултати. С други думи, MySQL дори нямаше нищо против :

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

Горната заявка работи по подобен начин за неекранирани и екранирани версии на тези по-горе изброени знаци, както е посочено по-долу:

$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 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да използвам клауза LIKE в подготвено изявление за PDO?

  2. Как да комбинирам агрегатни функции в MySQL?

  3. Има ли конвенция за именуване за MySQL?

  4. Как да декларирам променлива в MySQL?

  5. Преобразувайте strftime в SQLite заявка в MySQL