Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Những ký tự nào thực sự có khả năng gây ra SQL injection trong MySQL?

Xem xét các dòng dưới đây từ mysql_real_escape_string () hướng dẫn sử dụng:

Việc chèn SQL trong MySQL sẽ không thể thực hiện được chỉ với các ký tự đặc biệt sau:\b \0 \n \r \t \Z .

Tuy nhiên, hướng dẫn sử dụng String Literals nêu những điều sau nhưng các lý do được chỉ định (hoặc không) không liên quan đến SQL injection:

Hơn nữa, trong một thử nghiệm đơn giản, bất kể thời tiết, các ký tự đặc biệt được liệt kê ở trên có thoát ra ngoài hay không, MySQL đều cho kết quả tương tự. Nói cách khác, MySQL thậm chí còn không bận tâm:

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

Truy vấn trên hoạt động tương tự đối với các phiên bản không thoát và không thoát của các ký tự được liệt kê ở trên như được đưa vào bên dưới:

$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

Bảng thử nghiệm và dữ liệu được sử dụng trong thử nghiệm đơn giản:

-- 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. Làm thế nào để khởi động lại máy chủ MySQL từ xa đang chạy trên Ubuntu Linux?

  2. Lệnh thực thi mệnh đề / truy vấn MySQL

  3. Java Spring REST API xử lý nhiều tham số tùy chọn

  4. Nhận id của bản ghi được chèn gần đây nhất trong mybatis

  5. Mysql_real_escape_string có đủ để Anti SQL Injection không?