SQL Injection là một trong những tấn công phổ biến nhất hiện nay trên mạng, nắm bắt được nguyên tắc hoạt động của nó và biết cách bảo vệ website là rất quan trọng đối với mọi doanh nghiệp và cá nhân sở hữu website. Trong bài viết này, chúng ta sẽ tìm hiểu về SQL Injection và cách bảo vệ website của mình.
Nội dung bài viết
SQL Injection là gì?

SQL Injection là gì? Đây là một kỹ thuật tấn công mà hacker sử dụng để truy cập vào cơ sở dữ liệu của một website bằng cách thực thi câu lệnh SQL không hợp lệ. Khi một trang web bị tấn công bởi SQL Injection, hacker có thể truy cập vào cơ sở dữ liệu của trang web đó và lấy được thông tin rất quan trọng, như mật khẩu, thông tin cá nhân của người dùng, thông tin giao dịch, v.v. Điều này có thể gây tổn hại lớn đến tên tuổi của doanh nghiệp hoặc cá nhân sở hữu website, làm mất tin tưởng của khách hàng và giảm sức mạnh kinh doanh của họ.
SQL Injection hoạt động như thế nào?
SQL injection hoạt động bằng cách sử dụng các câu lệnh SQL không đúng được chèn vào các ô nhập liệu trên trang web. Khi người dùng nhập và gửi dữ liệu lên trang web, các câu lệnh SQL này sẽ được gửi đến cơ sở dữ liệu và được thực thi.
Ví dụ, nếu một trang web yêu cầu người dùng nhập tên đăng nhập và mật khẩu để đăng nhập, hacker có thể sử dụng câu lệnh SQL injection để thêm các câu lệnh khác vào ô nhập tên đăng nhập. Ví dụ, nếu hacker nhập “admin' OR '1'='1
” vào ô nhập tên đăng nhập, câu lệnh SQL sẽ trở thành “SELECT * FROM users WHERE username='admin' OR '1'='1' AND password='[password]'
” và sẽ trả về tất cả các bản ghi trong bảng người dùng, bởi vì câu lệnh “OR '1'='1'
” luôn luôn đúng.
Các hacker cũng có thể sử dụng các câu lệnh SQL injection để thực hiện các hành động không mong muốn khác như xóa dữ liệu hoặc thay đổi thông tin trong cơ sở dữ liệu.
Ví dụ về SQL Injection
Tập lệnh sau đây là mã giả được thực thi trên máy chủ web. Đây là một ví dụ đơn giản về xác thực bằng ID và Password. Cơ sở dữ liệu ví dụ có một bảng được đặt tên users
với các cột sau: username
và password
.
# Define POST variables
uname = request.POST['username']
passwd = request.POST['password']
# SQL query vulnerable to SQLi
sql = “SELECT id FROM users WHERE username=’” + uname + “’ AND password=’” + passwd + “’”
# Execute the SQL statement
database.execute(sql)
Các trường đầu vào này dễ bị SQL Injection. Kẻ tấn công có thể sử dụng các lệnh SQL trong đầu vào theo cách làm thay đổi câu lệnh SQL do máy chủ cơ sở dữ liệu thực thi. Ví dụ: họ có thể sử dụng thủ thuật liên quan đến một trích dẫn và đặt passwdtrường thành:
password' OR 1=1
Kết quả là máy chủ cơ sở dữ liệu chạy truy vấn SQL sau:
SELECT id FROM users WHERE username='username' AND password='password' OR 1=1'
Do OR 1=1
, nên mệnh đề trả về giá trị id
đầu tiên từ bảng users
bất kể username
và password
là gì.
Người dùng đầu tiên trong cơ sở dữ liệu thường là quản trị viên. Bằng cách này, kẻ tấn công không chỉ bỏ qua xác thực mà còn giành được đặc quyền của quản trị viên. Họ cũng có thể nhận xét phần còn lại của câu lệnh SQL để kiểm soát thêm việc thực thi truy vấn SQL:
-- MySQL, MSSQL, Oracle, PostgreSQL, SQLite
' OR '1'='1' --
' OR '1'='1' /*
-- MySQL
' OR '1'='1' #
-- Access (using null characters)
' OR '1'='1' %00
' OR '1'='1' %16
Các loại tấn công SQL Injection phổ biến hiện nay
Tấn công SQL Injection có ba loại: SQLi in-band ,SQLi Inferential và SQLi Inferential. Bạn có thể phân loại các kiểu SQL injection dựa trên phương pháp sử dụng để truy cập dữ liệu backend, hoặc khả năng gây hại của chúng.
SQLi in-band
SQLi in-band hay còn được gọi là SQLi cổ điển được sử dụng để khởi chạy các lỗi cơ sở dữ liệu và thu thập các kết quả từ cuộc tấn công đó. Loại tấn công này này hoạt động dựa trên hai kỹ thuật tấn công chính là Error-based và Union-based.
- Error-based :sử dụng các câu lệnh không hợp lệ để gây ra lỗi trong câu lệnh SQL và lấy thông tin từ các thông báo lỗi.
- Union-based :sử dụng câu lệnh UNION trong câu lệnh SELECT để truy vấn nhiều bảng cùng một lúc và lấy dữ liệu từ các bảng khác.
SQLi Inferential
SQL injection inferential là một loại tấn công SQL injection mà hacker sử dụng các truy vấn để lấy thông tin từ cơ sở dữ liệu mà không có quyền truy cập trực tiếp. Điều này được thực hiện bằng cách sử dụng các truy vấn boolean và lấy dữ liệu từ các thông báo lỗi hoặc các kết quả trả về khác.
Ví dụ, nếu một trang web có một form tìm kiếm và người dùng nhập vào một câu lệnh SQL không hợp lệ, hacker có thể sử dụng form tìm kiếm đó để thực hiện các truy vấn boolean và lấy dữ liệu từ các thông báo lỗi hoặc các kết quả trả về khác.
SQLi Out-of-band
SQL injection out-of-band là một loại tấn công SQL injection mà hacker sử dụng các kênh khác nhau để gửi dữ liệu và nhận kết quả trả về từ cơ sở dữ liệu. Điều này có nghĩa là hacker sử dụng các phương thức khác nhau như gửi email, gửi tin nhắn hoặc truy cập vào một trang web khác để nhận kết quả trả về từ câu lệnh SQL không hợp lệ.
Ví dụ, nếu một trang web có một form tìm kiếm và người dùng nhập vào một câu lệnh SQL không hợp lệ, hacker có thể sử dụng form tìm kiếm đó để gửi câu lệnh và thiết lập một trang web khác như là một đích đến để nhận kết quả trả về từ cơ sở dữ liệu.
Các phương pháp ngăn chặn SQL Injection
Một số phương pháp ngăn chặn tấn công SQL injection bao gồm:
- Sử dụng các câu lệnh parametized: Đây là một cách thức để truyền các tham số cho câu lệnh SQL thay vì truyền trực tiếp câu lệnh. Điều này giúp ngăn chặn việc chèn câu lệnh không hợp lệ vào câu lệnh.
- Sử dụng các hàm escape string: Đây là một cách thức để chống lại các ký tự đặc biệt trong câu lệnh SQL và giúp ngăn chặn việc chèn câu lệnh không hợp lệ vào câu lệnh.
- Kiểm tra kỹ các ô nhập liệu: Người phát triển phần mềm cần kiểm tra kỹ tất cả các ô nhập liệu trên trang web để ngăn chặn vi
- Cấm thông báo lỗi chi tiết trên trang web công khai: Nếu có lỗi xảy ra trong câu lệnh SQL, hệ thống cơ sở dữ liệu thường sẽ trả về một thông báo lỗi chi tiết. Để ngăn chặn tấn công SQL injection, người phát triển phần mềm cần cấm việc hiển thị các thông báo lỗi chi tiết trên trang web công khai.
- Sử dụng các biện pháp bảo mật khác nhau: Các biện pháp bảo mật khác như sử dụng các lớp bảo mật, sử dụng các tài khoản người dùng và mật khẩu hợp lệ, và sử dụng các chứng chỉ SSL để bảo vệ dữ liệu truyền qua mạng cũng có thể giúp ngăn chặn tấn công SQL injection.
- Cập nhật phần mềm: Các lỗ hổng bảo mật thường được khắc phục bằng cách cập nhật phần mềm. Đảm bảo rằng phần mềm của bạn được cập nhật thường xuyên.
Tổng kết về SQL Injection
SQL Injection là một tấn công mạng rất nguy hiểm và có thể gây tổn hại lớn đến tên tuổi và tài sản của doanh nghiệp hoặc cá nhân. Để bảo vệ thông tin của bạn, hãy sử dụng các biện pháp bảo mật chuẩn, sử dụng phần mềm bảo mật mới và được cập nhật, kiểm tra đầu vào người dùng và học và áp dụng các biện pháp bảo mật chuyên nghiệp. Việc chống lại SQL Injection cần được coi trọng và thực hiện một cách chặt chẽ để bảo vệ thông tin và tài sản của bạn.Nếu bạn có thắc mắc về SQL injection, hãy để lại ở bên bình luận bên dưới, BKHOST sẽ trả lời bạn trong thời gian sớm nhất.
- cách phòng chống sql injection
- tấn công sql injection
- sql injection là gì