Nội dung bài viết
#

SQL Injection là gì? Bảo vệ website của bạn từ tấn công SQL Injection

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.

SQL Injection là gì?

SQL injection la gi
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: usernamepassword.

# 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ể usernamepassword 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 InferentialSQLi 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-basedUnion-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ì

Thuê Cloud VPS Cao Cấp tại BKHOST

Giảm giá cực sâu, chất lượng hàng đầu. Đăng ký ngay hôm nay:

thuê cloud vps

Tôi là Trịnh Duy Thanh, CEO & Founder Công ty Cổ Phần Giải Pháp Mạng Trực Tuyến Việt Nam - BKHOST. Với sứ mệnh mang tới các dịch vụ trên Internet tốt nhất cho các cá nhân và doanh nghiệp trong nước và quốc tế, tôi luôn nỗ lực hết mình nâng cấp đầu tư hệ thống phần cứng, nâng cao chất lượng dịch vụ chăm sóc khách hàng để đem đến những sản phẩm hoàn hảo nhất cho người tiêu dùng. Vì vậy, tôi tin tưởng sẽ đem đến các giải pháp CNTT mới nhất, tối ưu nhất, hiệu quả nhất và chi phí hợp lý nhất cho tất cả các doanh nghiệp.
Bình luận

Thanh toán linh hoạt

Chúng tôi chấp nhận thanh toán như ATM, Visa, Internet Banking, Paypal, Baokim, Ngân lượng

Gọi ĐT tư vấn ngay
Chat ngay qua Zalo
Chat ngay qua Messenger
Góp ý
Bạn đã hài lòng với trải nghiệm trên Bkhost.vn?
Cảm ơn lượt bình chọn của bạn, Chúc bạn 1 ngày tốt lành !