SQL Injection là gì? Cách phòng chống như thế nào? | BKHOST

Các cuộc tiến công SQL injection là một trong những lỗ hổng ứng dụng web truyền kiếp nhất – đã được tranh luận từ cuối những năm 1990 – nhưng chúng vẫn còn tương thích cho đến thời nay .Vậy đơn cử loại tiến công này là gì và cách ngăn ngừa như thế nào ? Hãy cùng BKHOST khám phá ở bài viết dưới đây .

SQL Injection là gì ?

SQL injection la gi

SQL injection, đôi khi được viết tắt là SQLi, là một loại tấn công mà các hacker sử dụng để tìm cách vào cơ sở dữ liệu của một trang web bằng cách chèn các câu lệnh SQL không đúng vào các ô nhập liệu trên trang web. Điều này có thể giúp hacker truy cập vào cơ sở dữ liệu và thực hiện các hành động không mong muốn, chẳng hạn như xóa dữ liệu hoặc thay đổi thông tin.

Đây là một trong những kiểu tiến công thông dụng và nguy khốn nhất vì nó hoàn toàn có thể được sử dụng để tiến công bất kể ứng dụng web hoặc website nào sử dụng cơ sở tài liệu dựa trên SQL ( hầu hết trong số đó ) .

SQL Injection hoạt động giải trí như thế nào ?

SQL injection hoạt động giải trí 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 website. Khi người dùng nhập và gửi tài liệu lên trang web, các câu lệnh SQL này sẽ được gửi đến cơ sở tài 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 hoàn toàn có thể sử dụng các câu lệnh SQL injection để triển khai các hành vi không mong ước khác như xóa dữ liệu hoặc biến hóa thông tin trong cơ sở tài liệu .

Các loại tiến công SQL Injection phổ cập lúc bấy giờ

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 tiến công SQL injection mà hacker sử dụng các truy vấn để lấy thông tin từ cơ sở tài liệu mà không có quyền truy vấn trực tiếp. Điều này được thực thi bằng cách sử dụng các truy vấn boolean và lấy tài liệu từ các thông tin lỗi hoặc các tác dụng trả về khác .Ví dụ, nếu một website 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 hoàn toàn có thể sử dụng form tìm kiếm đó để triển khai các truy vấn boolean và lấy tài liệu từ các thông tin lỗi hoặc các tác dụng trả về khác .

SQLi Out-of-band

SQL injection out-of-band là một loại tiến công SQL injection mà hacker sử dụng các kênh khác nhau để gửi tài liệu và nhận hiệu quả trả về từ cơ sở tài liệu. Điều này có nghĩa là hacker sử dụng các phương pháp khác nhau như gửi email, gửi tin nhắn hoặc truy vấn vào một website khác để nhận hiệu quả trả về từ câu lệnh SQL không hợp lệ .Ví dụ, nếu một website 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 hoàn toàn có thể sử dụng form tìm kiếm đó để gửi câu lệnh và thiết lập một website khác như thể một đích đến để nhận hiệu quả trả về từ cơ sở tài 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 nguồn vào này dễ bị SQL Injection. Kẻ tiến công hoàn toàn có thể sử dụng các lệnh SQL trong nguồn vào theo cách làm biến hóa câu lệnh SQL do sever cơ sở tài liệu thực thi. Ví dụ : họ hoàn toàn có thể sử dụng thủ pháp tương quan đến một trích dẫn và đặt passwdtrường thành :

password' OR 1=1

Kết quả là sever cơ sở tài 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 tiên phong trong cơ sở tài liệu thường là quản trị viên. Bằng cách này, kẻ tiến công không riêng gì bỏ lỡ xác nhận mà còn giành được độc quyền của quản trị viên. Họ cũng hoàn toàn có thể nhận xét phần còn lại của câu lệnh SQL để trấn áp 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 chiêu thức ngăn ngừa SQL Injection

Một số giải pháp ngăn ngừa tiến công SQL injection gồm có :

  • 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

Như vậy, SQL injection là một cuộc tấn công dữ liệu nguy hiểm có thể xảy ra với bất kỳ đối tượng nào. Vì thế, người dùng hay các doanh nghiệp cần trang bị cho hệ thống bảo mật của mình các lớp khóa an toàn và hoàn thiện nhất để ngăn chặn các nguy cơ tấn công.

Nếu bạn có vướng mắc về SQL injection, hãy để lại ở bên phản hồi bên dưới, BKHOST sẽ vấn đáp bạn trong thời hạn sớm nhất .

  • cách phòng chống sql injection
  • tấn công sql injection
  • sql injection là gì