Hướng dẫn what is sql injection in mysql? - tiêm sql trong mysql là gì?

Hướng dẫn what is sql injection in mysql? - tiêm sql trong mysql là gì?

MySQL - Phòng chống tiêm SQL

Nếu bạn đã từng lấy đầu vào người dùng thô và chèn nó vào cơ sở dữ liệu MySQL, có khả năng bạn đã để mình mở rộng cho một vấn đề bảo mật được gọi là tiêm SQL. Bài học này sẽ dạy bạn cách giúp ngăn chặn điều này xảy ra và giúp bạn bảo mật các tập lệnh và câu lệnh MySQL của bạn.

SQL tiêm là gì

SQL Injection đề cập đến hành động của một người nào đó chèn tuyên bố MySQL sẽ được chạy trên cơ sở dữ liệu của bạn mà không có kiến ​​thức của bạn. Tiêm thường xảy ra khi bạn yêu cầu người dùng đầu vào, như tên của họ và thay vì một tên họ cung cấp cho bạn câu lệnh MySQL rằng bạn sẽ vô tình chạy trên cơ sở dữ liệu của mình.

Ví dụ SQL tiêm

Dưới đây là một chuỗi mẫu đã được thu thập từ một người dùng bình thường và người dùng xấu đang cố gắng sử dụng SQL Injection. Chúng tôi đã yêu cầu người dùng đăng nhập của họ, sẽ được sử dụng để chạy câu lệnh Chọn để lấy thông tin của họ.

Mã MySQL & PHP:

// a good user's name
$name = "timmy"; 
$query = "SELECT * FROM customers WHERE username = '$name'";
echo "Normal: " . $query . "
"; // user input that uses SQL Injection $name_bad = "' OR 1'"; // our MySQL query builder, however, not a very safe one $query_bad = "SELECT * FROM customers WHERE username = '$name_bad'"; // display what the new query will look like, with injection echo "Injection: " . $query_bad;

Display:

Bình thường: Chọn * Từ khách hàng trong đó tên người dùng = 'Timmy' tiêm: Chọn * từ khách hàng nơi người dùng = '' hoặc 1 ''
Injection: SELECT * FROM customers WHERE username = '' OR 1''

Truy vấn thông thường không có vấn đề gì, vì câu lệnh MySQL của chúng tôi sẽ chỉ chọn mọi thứ từ khách hàng có tên người dùng bằng Timmy.

Tuy nhiên, cuộc tấn công tiêm thuốc đã thực sự khiến truy vấn của chúng tôi hoạt động khác với dự định của chúng tôi. Bằng cách sử dụng một trích dẫn duy nhất ('), họ đã kết thúc phần chuỗi của truy vấn MySQL của chúng tôi, the injection attack has actually made our query behave differently than we intended. By using a single quote (') they have ended the string part of our MySQL query

  • Tên người dùng = ''

và sau đó thêm vào câu lệnh của chúng tôi với một hoặc mệnh đề 1 (luôn luôn đúng).

  • Tên người dùng = '' hoặc 1OR 1

Điều này hoặc mệnh đề của 1 sẽ luôn luôn đúng và vì vậy mỗi mục nhập trong bảng "Khách hàng" sẽ được chọn bởi câu lệnh này!every single entry in the "customers" table would be selected by this statement!

Các cuộc tấn công SQL nghiêm trọng hơn

Mặc dù ví dụ trên cho thấy một tình huống mà kẻ tấn công có thể có thể truy cập vào nhiều thông tin mà họ không nên có, các cuộc tấn công có thể tồi tệ hơn rất nhiều. Ví dụ, kẻ tấn công có thể xóa một bảng bằng cách thực hiện một câu lệnh xóa.

Mã MySQL & PHP:

$name_evil = "'; DELETE FROM customers WHERE 1 or username = '"; 

// our MySQL query builder really should check for injection
$query_evil = "SELECT * FROM customers WHERE username = '$name_evil'";

// the new evil injection query would include a DELETE statement
echo "Injection: " . $query_evil;

Display:

Bình thường: Chọn * Từ khách hàng trong đó tên người dùng = 'Timmy' tiêm: Chọn * từ khách hàng nơi người dùng = '' hoặc 1 ''

Truy vấn thông thường không có vấn đề gì, vì câu lệnh MySQL của chúng tôi sẽ chỉ chọn mọi thứ từ khách hàng có tên người dùng bằng Timmy.

Tuy nhiên, cuộc tấn công tiêm thuốc đã thực sự khiến truy vấn của chúng tôi hoạt động khác với dự định của chúng tôi. Bằng cách sử dụng một trích dẫn duy nhất ('), họ đã kết thúc phần chuỗi của truy vấn MySQL của chúng tôi

Tên người dùng = ''

và sau đó thêm vào câu lệnh của chúng tôi với một hoặc mệnh đề 1 (luôn luôn đúng).

Tên người dùng = '' hoặc 1

Mã MySQL & PHP:

//NOTE: you must be connected to the database to use this function!
// connect to MySQL

$name_bad = "' OR 1'"; 

$name_bad = mysql_real_escape_string($name_bad);

$query_bad = "SELECT * FROM customers WHERE username = '$name_bad'";
echo "Escaped Bad Injection: 
" . $query_bad . "
"; $name_evil = "'; DELETE FROM customers WHERE 1 or username = '"; $name_evil = mysql_real_escape_string($name_evil); $query_evil = "SELECT * FROM customers WHERE username = '$name_evil'"; echo "Escaped Evil Injection:
" . $query_evil;

Display:

Bình thường: Chọn * Từ khách hàng trong đó tên người dùng = 'Timmy' tiêm: Chọn * từ khách hàng nơi người dùng = '' hoặc 1 ''
SELECT * FROM customers WHERE username = '\' OR 1\''
Escaped Evil Injection:
SELECT * FROM customers WHERE username = '\'; DELETE FROM customers WHERE 1 or username = \''

Truy vấn thông thường không có vấn đề gì, vì câu lệnh MySQL của chúng tôi sẽ chỉ chọn mọi thứ từ khách hàng có tên người dùng bằng Timmy.

  • Tuy nhiên, cuộc tấn công tiêm thuốc đã thực sự khiến truy vấn của chúng tôi hoạt động khác với dự định của chúng tôi. Bằng cách sử dụng một trích dẫn duy nhất ('), họ đã kết thúc phần chuỗi của truy vấn MySQL của chúng tôi
  • Tên người dùng = ''

và sau đó thêm vào câu lệnh của chúng tôi với một hoặc mệnh đề 1 (luôn luôn đúng).

Hướng dẫn what is sql injection in mysql? - tiêm sql trong mysql là gì?

  • Tên người dùng = '' hoặc 1
  • Điều này hoặc mệnh đề của 1 sẽ luôn luôn đúng và vì vậy mỗi mục nhập trong bảng "Khách hàng" sẽ được chọn bởi câu lệnh này!

Các cuộc tấn công SQL nghiêm trọng hơn

Mặc dù ví dụ trên cho thấy một tình huống mà kẻ tấn công có thể có thể truy cập vào nhiều thông tin mà họ không nên có, các cuộc tấn công có thể tồi tệ hơn rất nhiều. Ví dụ, kẻ tấn công có thể xóa một bảng bằng cách thực hiện một câu lệnh xóa.

Chọn * từ khách hàng nơi người dùng = ''; Xóa khỏi khách hàng nơi 1 hoặc tên người dùng = ''

Nếu bạn đã chạy truy vấn này, thì câu lệnh xóa được tiêm sẽ làm trống hoàn toàn bảng "khách hàng" của bạn. Bây giờ bạn biết đây là một vấn đề, làm thế nào bạn có thể ngăn chặn nó?

SQL Injection có nghĩa là gì?

Tiêm SQL, đôi khi được viết tắt là SQLI, là một loại lỗ hổng trong đó kẻ tấn công sử dụng một đoạn mã SQL (ngôn ngữ truy vấn có cấu trúc) để thao tác cơ sở dữ liệu và có quyền truy cập vào thông tin có giá trị.a type of vulnerability in which an attacker uses a piece of SQL (structured query language) code to manipulate a database and gain access to potentially valuable information.

Có thể tiêm SQL trong MySQL không?

Với MySQL, các truy vấn được sử dụng thường không thể được sử dụng để tiêm SQL.Tuy nhiên, điều này đôi khi là có thể nếu ứng dụng đích sử dụng một số API PHP hoặc Python nhất định để liên lạc với cơ sở dữ liệu MySQL.batched queries typically cannot be used for SQL injection. However, this is occasionally possible if the target application uses certain PHP or Python APIs to communicate with a MySQL database.

SQL tiêm là gì và nó hoạt động như thế nào?

Ngoài ra, tiêm SQL là một trong những loại tấn công tiêm phổ biến nhất.Để thực hiện nó, một kẻ tấn công cung cấp các câu lệnh SQL độc hại thông qua ứng dụng.Chúng kiểm soát máy chủ cơ sở dữ liệu phụ trợ.SQL tiêm độc lập với công nghệ được sử dụng cho ứng dụng cơ bản.one of the most common types of injection attack. To carry it out, an attacker provides malicious SQL statements through the application. These control the backend database server. SQL injection is independent of the technology used for the underlying application.

5 loại tiêm SQL là gì?

Các loại tiêm SQL:..
SQL tiêm dựa trên lỗi:.
Làm thế nào để phát hiện lỗi SQL dựa trên lỗi ?.
Truy vấn dựa trên công đoàn:.
SQLI mù.1. SQLI dựa trên SQLI:- SQLI dựa trên thời gian: SQLI giảm thiểu: Giảm thiểu tốt nhất:.