Menu
×

Được chứng nhận

Ghi lại kiến ​​thức của bạn

Đăng nhập Đăng ký

Tạo Tài khoản Example.com.vn miễn phí để cải thiện trải nghiệm học tập của bạn

Người tìm đường và việc học của tôi

Theo dõi tiến độ học tập của bạn tại Example.com.vn và thu thập phần thưởng

Nâng cấp

Trở thành người dùng PLUS và mở khóa các tính năng mạnh mẽ (không có quảng cáo, lưu trữ, hỗ trợ, ..)

Bắt đầu từ đâu

Bạn không chắc chắn muốn bắt đầu từ đâu? Đi theo con đường được hướng dẫn của chúng tôi

Trình chỉnh sửa mã (Dùng thử)

Với trình chỉnh sửa mã trực tuyến của chúng tôi, bạn có thể chỉnh sửa mã và xem kết quả trong trình duyệt của mình

Video

Tìm hiểu những điều cơ bản về HTML qua video hướng dẫn thú vị và hấp dẫn

Mẫu

Chúng tôi đã tạo một loạt mẫu trang web đáp ứng mà bạn có thể sử dụng - miễn phí!

Web hosting

Lưu trữ trang web của riêng bạn và chia sẻ nó với mọi người với Example.com.vn Spaces

Tạo một máy chủ

Tạo máy chủ của riêng bạn bằng Python, PHP, React.js, Node.js, Java, C#, v.v.

Làm thế nào để

Bộ sưu tập lớn các đoạn mã cho HTML, CSS và JavaScript

Khung CSS

Xây dựng các trang web nhanh và phản hồi bằng cách sử dụng khung W3.CSS miễn phí của chúng tôi

Thống kê trình duyệt

Đọc xu hướng dài hạn của việc sử dụng trình duyệt

Tốc độ gõ

Kiểm tra tốc độ đánh máy của bạn

Đào tạo AWS

Tìm hiểu dịch vụ web của Amazon

Bộ chọn màu

Sử dụng công cụ chọn màu của chúng tôi để tìm các màu RGB, HEX và HSL khác nhau. Bánh xe màu hình tròn thể hiện sự chuyển màu trong quang phổ

Trò chơi mã

Trò chơi mã hóa W3Schools! Giúp linh miêu thu thập nón thông Logo Lynx

Đặt mục tiêu

Nhận hành trình học tập được cá nhân hóa dựa trên các kỹ năng và mục tiêu hiện tại của bạn

Bản tin

Tham gia bản tin của chúng tôi và có quyền truy cập vào nội dung độc quyền mỗi tháng

Việc làm

Thuê những tài năng công nghệ hàng đầu. Hợp lý hóa quy trình tuyển dụng của bạn để có đội ngũ phù hợp hoàn hảo

Lớp học

Hãy liên hệ để sử dụng Example.com.vn Plus và các chứng chỉ với tư cách là một tổ chức giáo dục

×
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP CÁCH W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS AN NINH MẠNG DỮ LIỆU KHOA HỌC

Hướng dẫn SQL

SQL HOME Giới thiệu SQL Cú pháp SQL SQL Chọn SQL Chọn SQL riêng biệt Trong đó Thứ tự SQL theo SQL và SQL Hoặc SQL không phải SQL Chèn vào SQL Giá trị Null Cập nhật SQL SQL Xóa SQL Chọn các hàm tổng hợp SQL hàng đầu SQL Tối thiểu và Tối đa Số lượng SQL Tổng SQL SQL Trung bình SQL như thế nào Ký tự đại diện SQL SQL trong SQL giữa các bí danh SQL SQL tham gia SQL Inner Tham gia SQL trái Tham gia SQL phải Tham gia SQL đầy đủ Tham gia SQL Tự tham gia SQL Union Nhóm SQL theo SQL Có SQL tồn tại SQL Bất kỳ, Tất cả SQL Chọn vào SQL Chèn vào trường hợp SQL chọn Hàm SQL Null Thủ tục lưu trữ SQL Nhận xét SQL Toán tử SQL

Cơ sở dữ liệu SQL

SQL Tạo DB SQL Drop DB SQL Backup DB SQL Tạo bảng SQL Drop Table SQL Alter Table SQL Alters Ràng buộc SQL SQL Not Null SQL Khóa chính SQL duy nhất SQL Khóa ngoài SQL Kiểm tra SQL Chỉ mục SQL mặc định SQL Tự động tăng ngày SQL Lượt xem SQL SQL Tiêm SQL Lưu trữ dữ liệu SQL Các loại

Tài liệu tham khảo SQL

Từ khóa SQL Hàm MySQL Chức năng máy chủ SQL Chức năng truy cập MS Tham khảo nhanh SQL

Ví dụ về SQL

Ví dụ về SQL Trình soạn thảo SQL Câu đố SQL Bài tập SQL Máy chủ SQL SQL Bootcamp Chứng chỉ SQL

Tiêm SQL


Tiêm SQL

SQL SQL là một kỹ thuật chèn mã có thể phá hủy cơ sở dữ liệu của bạn.

SQL SQL là một trong những kỹ thuật hack web phổ biến nhất.

SQL SQL là việc đặt mã độc vào câu lệnh SQL thông qua đầu vào trang web.


SQL trong trang web

Việc chèn SQL thường xảy ra khi bạn yêu cầu người dùng nhập dữ liệu, chẳng hạn như tên người dùng/userid của họ và thay vì tên/id, người dùng sẽ cung cấp cho bạn một câu lệnh SQL mà bạn sẽ vô tình chạy trên cơ sở dữ liệu của mình.

Hãy xem ví dụ sau để tạo câu lệnh SELECT bằng cách thêm một biến (txtUserId) vào chuỗi chọn. Biến được tìm nạp từ đầu vào của người dùng (getRequestString):

Ví dụ

txtUserId = getRequestString("UserId");
txtSQL = "SELECT * FROM Users WHERE UserId = " + txtUserId;

Phần còn lại của chương này mô tả những mối nguy hiểm tiềm ẩn khi sử dụng dữ liệu đầu vào của người dùng trong các câu lệnh SQL.


Việc tiêm SQL dựa trên 1=1 luôn đúng

Hãy nhìn lại ví dụ trên một lần nữa. Mục đích ban đầu của mã là tạo một câu lệnh SQL để chọn một người dùng với id người dùng nhất định.

Nếu không có gì ngăn cản người dùng nhập dữ liệu "sai", người dùng có thể nhập một số dữ liệu nhập "thông minh" như thế này:

Tên người dùng:

Sau đó, câu lệnh SQL sẽ trông như thế này:

SELECT * FROM Users WHERE UserId = 105 OR 1=1;

SQL ở trên hợp lệ và sẽ trả về TẤT CẢ các hàng từ bảng "Người dùng", vì OR 1=1 luôn là TRUE.

Ví dụ trên có vẻ nguy hiểm không? Điều gì sẽ xảy ra nếu bảng "Người dùng" chứa tên và mật khẩu?

Câu lệnh SQL ở trên gần giống như sau:

SELECT UserId, Name, Password FROM Users WHERE UserId = 105 or 1=1;

Tin tặc có thể có quyền truy cập vào tất cả tên người dùng và mật khẩu trong cơ sở dữ liệu chỉ bằng cách chèn 105 OR 1=1 vào trường nhập.



Việc tiêm SQL dựa trên ""="" luôn đúng

Dưới đây là ví dụ về người dùng đăng nhập vào một trang web:

Tên tài khoản:

Mật khẩu:

Ví dụ

uName = getRequestString("username");
uPass = getRequestString("userpassword");

sql = 'SELECT * FROM Users WHERE Name ="' + uName + '" AND Pass ="' + uPass + '"'

Kết quả

SELECT * FROM Users WHERE Name ="John Doe" AND Pass ="myPass"

Tin tặc có thể truy cập vào tên người dùng và mật khẩu trong cơ sở dữ liệu bằng cách chèn " OR ""=" vào hộp văn bản tên người dùng hoặc mật khẩu:

Tên tài khoản:

Mật khẩu:

Mã tại máy chủ sẽ tạo một câu lệnh SQL hợp lệ như thế này:

Kết quả

SELECT * FROM Users WHERE Name ="" or ""="" AND Pass ="" or ""=""

SQL ở trên hợp lệ và sẽ trả về tất cả các hàng từ bảng "Người dùng", vì OR ""="" luôn là TRUE.


SQL SQL dựa trên các câu lệnh SQL hàng loạt

Hầu hết các cơ sở dữ liệu đều hỗ trợ câu lệnh SQL theo đợt.

Một loạt câu lệnh SQL là một nhóm gồm hai câu lệnh SQL trở lên, được phân tách bằng dấu chấm phẩy.

Câu lệnh SQL bên dưới sẽ trả về tất cả các hàng từ bảng "Người dùng", sau đó xóa bảng "Nhà cung cấp".

Ví dụ

SELECT * FROM Users; DROP TABLE Suppliers

Hãy xem ví dụ sau:

Ví dụ

txtUserId = getRequestString("UserId");
txtSQL = "SELECT * FROM Users WHERE UserId = " + txtUserId;

Và đầu vào sau:

Tên người dùng:

Câu lệnh SQL hợp lệ sẽ trông như thế này:

Kết quả

SELECT * FROM Users WHERE UserId = 105; DROP TABLE Suppliers;

Sử dụng tham số SQL để bảo vệ

Để bảo vệ một trang web khỏi việc tiêm SQL, bạn có thể sử dụng các tham số SQL.

Tham số SQL là các giá trị được thêm vào truy vấn SQL tại thời điểm thực thi, theo cách được kiểm soát.

Ví dụ về dao cạo ASP.NET

txtUserId = getRequestString("UserId");
txtSQL = "SELECT * FROM Users WHERE UserId = @0";
db.Execute(txtSQL,txtUserId);

Lưu ý rằng các tham số được thể hiện trong câu lệnh SQL bằng dấu @.

Công cụ SQL kiểm tra từng tham số để đảm bảo rằng nó đúng với cột của nó và được xử lý theo nghĩa đen chứ không phải là một phần của SQL sẽ được thực thi.

Một vi dụ khac

txtNam = getRequestString("CustomerName");
txtAdd = getRequestString("Address");
txtCit = getRequestString("City");
txtSQL = "INSERT INTO Customers (CustomerName,Address,City) Values(@0,@1,@2)";
db.Execute(txtSQL,txtNam,txtAdd,txtCit);

Ví dụ

Các ví dụ sau đây cho thấy cách xây dựng các truy vấn được tham số hóa bằng một số ngôn ngữ web phổ biến.

TUYÊN BỐ CHỌN TRONG ASP.NET:

txtUserId = getRequestString("UserId");
sql = "SELECT * FROM Customers WHERE CustomerId = @0";
command = new SqlCommand(sql);
command.Parameters.AddWithValue("@0",txtUserId);
command.ExecuteReader();

CHÈN VÀO TUYÊN BỐ TRONG ASP.NET:

txtNam = getRequestString("CustomerName");
txtAdd = getRequestString("Address");
txtCit = getRequestString("City");
txtSQL = "INSERT INTO Customers (CustomerName,Address,City) Values(@0,@1,@2)";
command = new SqlCommand(txtSQL);
command.Parameters.AddWithValue("@0",txtNam);
command.Parameters.AddWithValue("@1",txtAdd);
command.Parameters.AddWithValue("@2",txtCit);
command.ExecuteNonQuery();

CHÈN VÀO TUYÊN BỐ TRONG PHP:

$stmt = $dbh->prepare("INSERT INTO Customers (CustomerName,Address,City)
VALUES (:nam, :add, :cit)");
$stmt->bindParam(':nam', $txtNam);
$stmt->bindParam(':add', $txtAdd);
$stmt->bindParam(':cit', $txtCit);
$stmt->execute();

×

Liên hệ bán hàng

Nếu bạn muốn sử dụng dịch vụ của Example.com.vn với tư cách là một tổ chức giáo dục, nhóm hoặc doanh nghiệp, hãy gửi email cho chúng tôi:
[email được bảo vệ]

Báo cáo lỗi

Nếu bạn muốn báo cáo lỗi hoặc nếu bạn muốn đưa ra đề xuất, hãy gửi email cho chúng tôi:
[email được bảo vệ]

Example.com.vn được tối ưu hóa cho việc học tập và đào tạo. Các ví dụ có thể được đơn giản hóa để cải thiện khả năng đọc và học. Các hướng dẫn, tài liệu tham khảo và ví dụ liên tục được xem xét để tránh sai sót, nhưng chúng tôi không thể đảm bảo tính chính xác hoàn toàn của mọi nội dung. Khi sử dụng W3Schools, bạn đồng ý đã đọc và chấp nhận các điều khoản sử dụng , chính sách cookie và quyền riêng tư của chúng tôi.

Bản quyền 1999-2024 của Refsnes Data. Đã đăng ký Bản quyền. Example.com.vn được cung cấp bởi W3.CSS .