Lỗi SQL Injection là gì? Cách diệt tận gốc các lỗi SQL Injection

ITNavi 22 Jan 2021 11005
Một trong những lỗ hổng trong truy vấn dữ liệu khiến không ít lập trình viên phải lo lắng đó chính là SQL Injection cũng như Blind SQL Injection. Tuy nhiên với các lập trình viên mới bước vào nghề sẽ không khỏi tò mò về lỗi này. Vậy, lỗi SQL Injection là gì? Theo dõi thông tin mà ITNavi chia sẻ trong bài viết sau để tìm ra đáp án nhé!

Lỗi SQL Injection là gì? Blind SQL Injection là gì?

Lỗi SQL Injection là gì?

SQL Injection là một kỹ thuật lợi dụng vào các lỗ hổng liên quan đến câu chuyện truy vấn của các ứng dụng. Việc này sẽ được thực hiện bằng cách chèn thêm một đoạn SQL để làm sai lệnh đi các câu truy vấn ban đầu, từ đó sẽ khai thác các dữ liệu từ database.  SQL Injection thường cho phép kẻ tấn công thực hiện những thao tác tương tự như người quản trị website dựa trên cơ sở dữ liệu của ứng dụng.  SQL Injection là gì?

SQL Injection là gì?

Blind SQL Injection là gì?

Bạn có thể hiểu Blind SQL Injection là  một kiểu tấn công SQL Injection mà ở đó các truy vấn cơ sở dữ liệu sẽ sử dụng các mệnh đề để đoán biết. Đây là cách tấn công thường xuyên được sử dụng khi một ứng dụng web hoặc apps được cấu hình để chỉ hiển thị các thông báo bị lỗi chung chung hoặc không được hiển thị ra lỗi của SQL. Blind SQL Injection đôi khi còn được gọi với cái tên khác là SQL Inferential SQL.  Sẽ có hai biến thể chính giúp thực hiện Blind SQL Injection chính là: Blind SQL Injection dựa vào nội dung phản hồi và Blind SQL Injection dựa vào những độ trễ của chính thời gian phản hồi.  Bạn đọc tham khảo thêm: SQL Server là gì? Mục đích của việc sử dụng SQL Server

Ví dụ giúp bạn hiểu rõ tấn công SQL Injection là gì?

Ở trong Form đăng nhập thì người sử dụng nhập dữ liệu ở trong trường tìm kiếm và người dùng sẽ nhập các văn bản tìm kiếm. Khi đó, các biểu mẫu lưu dữ liệu và người dùng nhập dữ liệu cần phải lưu chúng lại. Toàn bộ các dữ liệu đã được chỉ định này đều sẽ được đi vào cơ sở dữ liệu.  Thay cho việc nhập đúng dữ liệu, kẻ tấn công sẽ lợi dụng lỗ hổng để có thể insert rồi thực thi những câu lệnh SQL bất hợp pháp để có thể lấy dữ liệu này của người sử dụng. Khi đó, SQL Injection sẽ thực hiện với ngôn ngữ lập trình SQL và chúng được dùng với mục đích quản lý dữ liệu đã được lưu trữ trong toàn bộ các cơ sở dữ liệu.  Tuy nhiên, hiện nay thì chúng ta chỉ thường làm việc trên các Framework mang tính hiện đại và các Framework này đều đã được test rất cẩn thận để có thể giảm tránh được các lỗi trong đó có SQL Injection. 

Sự nguy hiểm của lỗi SQL Injection là gì?

Hiện nay, SQL Injection được xem là kiểu tấn công vô cùng nguy hiểm vì: 
  • SQL Injection có thể hack được tài khoản cá nhân. 
  • Thực hiện sao chép hoặc ăn cắp các dữ liệu của hệ thống cũng như trang web. 
  • SQL Injection có thể thay đổi các dữ liệu nhạy cảm được tích hợp của hệ thống. 
Tấn công SQL Injection có nguy hiểm không?

Tấn công SQL Injection có nguy hiểm không?

  • SQL Injection xóa được các dữ liệu quan trọng và dữ liệu mang tính nhạy cảm của toàn bộ hệ thống. 
  • Người sử dụng có thể đăng nhập vào ứng dụng một cách dễ dàng với tư cách của người dùng khác. Kể cả việc đăng nhập với tư cách là một quản trị viên cũng được thực hiện một cách dễ dàng. 
  • Khi lỗi SQL Injection xuất hiện thì người sử dụng có thể xem mọi thông tin cá nhân thuộc về những người khác. Ví dụ như: chi tiết về hồ sơ cá nhân của họ, chi tiết về các giao dịch của họ, chi tiết về các truy cập của họ,... 
  • Khi lỗi SQL Injection xảy ra, thì mọi người dùng đều có thể sửa đổi cấu trúc của dữ liệu một cách dễ dàng, thậm chí họ còn có thể xóa các bảng nằm trong cơ sở dữ liệu của ứng dụng. 
  • Người dùng hoàn toàn có thể kiểm soát máy chủ cơ sở dữ liệu cũng như thực hiện các lệnh thay đổi theo ý muốn của chính mình. 
Bạn đọc tham khảo một số việc làm Java tại ITNAVI

Ví dụ về một cuộc tấn công SQL Injection

Cuộc tấn công SQL Injection sẽ được thực hiện một cách dễ dàng với ví dụ như sau:  Việc thực hiện kiểm tra các lỗ hổng này có thể được thực hiện dễ dàng hơn. Đôi khi thì bạn có thể nhập ký hiệu ‘ hoặc “ vào các trường kiểm tra. Thì, nó đều sẽ được trả về với bất kỳ thông báo bất ngờ khác hoặc bất thường khác. Khi đó, bạn hoàn toàn có thể chắc chắn rằng SQL Injection sẽ khả thi cho trường hợp đó.  Nếu như người dùng không còn nhập như bình thường nữa mà họ đã thêm một dấu nháy ‘ hoặc “ thì dòng code của bạn sẽ bị lỗi một cách dễ dàng. Hoặc họ có thể thực hiện sửa thành một câu truy vấn luôn đúng hoặc chèn thêm một câu lệnh truy vấn ở phía sau.  SQL Injection tấn công vào website như thế nào?

SQL Injection tấn công vào website như thế nào?

Cách thức website bị tấn công SQL Injection là gì?

Những cuộc tấn công SQL Injection sẽ được thực hiện bằng biện pháp gửi lệnh SQL độ hại đến cho các máy chủ cơ sở dữ liệu dựa vào yêu cầu của người sử dụng mà website cho phép. Khi đó, bất kỳ kênh input nào cũng có thể sử dụng được chúng để gửi lệnh độc hại và nó bao gồm các thẻ: <input>, chuỗi truy vấn, cookie và các tệp tin.  Khi người dùng thực hiện nhập thông tin đăng nhập của họ và nhấp vào nút log in thì mọi thông tin đều sẽ được gửi lại cho chính máy chủ web của bạn. Ở đó, thì nó đều sẽ được kết hợp với một lệnh SQL.  Sau này, thì lệnh đó sẽ được gửi đến với một máy chủ cơ sở dữ  liệu và tập hợp các dữ liệu kết quả xác định xem username và password có tương ứng với một tài khoản hợp lệ hay không.   Ví dụ: người dùng nhập john để làm username và 123456 để làm password. khi đó, sẽ chuyển mã lệnh thành như sau:  SELECT * FROM users WHERE username='john' AND password='123456' Nhưng điều gì sẽ xảy ra khi bạn quyết định thử một cái khác, thì lệnh kết quả sẽ xuất hiện là:  SELECT * FROM users WHERE username='john' OR 1=1; -- ' AND password='123456' Kết quả được trả về chính là thông tin đăng nhập thuộc người dùng có tên là “john” mà không cần phải có mật khẩu chính xác.  Đây chỉ là một trong những hình thức đơn giản nhất mà cuộc tấn công SQL Injection sở hữu. Với vài thủ thuật đơn giản, thì kẻ tấn công sẽ có thể thêm tài khoản mới và xóa hoặc sửa đổi đi các thông tin của những tài khoản người dùng đang hiện có. Chỉ cùng một cách tấn công mà họ có thể sử dụng để lấy cắp mọi bản hồ sơ cũng như thông tin của người dùng nếu như chúng không được giới hạn cho khách truy cập hoặc để thay đổi đi nội dung của hồ sơ.  Với trường hợp nghiêm trọng hơn thì việc kết nối với máy chủ cơ sở dữ liệu sẽ được thực hiện thông qua tài khoản quản trị và kẻ tấn công có thể đã đi sâu vào hệ điều hành của máy chủ. Khi đó, kẻ tấn công có thể sử dụng lỗ hổng SQL Injection để cùng lúc tạo ra tài khoản người dùng có trên máy chủ bị xâm nhập hoặc kích hoạt các tính năng Remote  Desktop. Từ đó, cài đặt thư mục chia sẻ SMB và tải phần mềm độc hại, rồi làm rối tung mọi thứ đã được lưu trữ trong cơ sử dữ liệu. 

Cách tự vệ trước các cuộc tấn công SQL Injection là gì? 

Dưới đây là các biện pháp để có thể đảm bảo an toàn cho input của người dùng trước các cuộc tấn công SQL Injection: 

Không nên tin vào input của người dùng

Với tất cả những gì mà người dùng đã nhập vào phải được coi là độc hại nếu có bằng chứng khác. Nó thường không chỉ dành cho các hộp nhập liệu đơn giản như vùng văn bản mà nó còn dành cho nhiều thứ khác như: input ẩn, các chuỗi tham số truy vấn, cookie và các tệp tải lên.  Cách tự vệ trước cuộc tấn công SQL Injection là gì?

Cách tự vệ trước cuộc tấn công SQL Injection là gì?

Browsers của trình duyệt sẽ không cho phép người sử dụng có thể thao tác với một input mà nó cũng không có nghĩa là giả mạo. Những công cụ như Burp Suite sẽ cho phép người dùng chiếm được HTTP requests và sửa đổi được bằng bất cứ điều gì (kể cả các giá trị ẩn trước khi chúng được gửi tới máy chủ). 

Xác nhận các chuỗi input từ phía máy chủ

Xác nhận là một trong những quá trình đảm bảo cho dữ liệu của người nhập vào hợp lệ, và có thể vô hiệu hóa bất kỳ lệnh độc hại tiềm ẩn nào khác đều có thể sử dụng trong chuỗi nhập.  Các sửa đổi đơn giản này sẽ bảo vệ mã của bạn tránh khỏi các cuộc tấn công SQL Injection bằng biện pháp thêm ký tự thoát (\) vào trước dấu nháy đơn đã được kẻ tấn công thêm vào. 

Phân định kiểu input rõ ràng

Mẹo này được sử dụng chuyên cho các ngôn ngữ như PHP, một khi bạn không định nghĩa các kiểu dữ liệu cho các biến số. Nếu định nghĩa rõ ràng thì kiểu input sẽ như một cách giúp bạn loại bỏ được các dữ liệu có thể làm sai câu lệnh SQL. 

Mã hóa cho các dữ liệu nhạy cảm

Nó thường bao gồm mật khẩu, câu hỏi, câu trả lời về bảo mật, dữ liệu tài chính, thông tin y tế và những thông tin khác. Điều này sẽ đảm bảo cả khi tin tặc nắm trong tay dữ liệu của bạn thì chúng cũng không thể khai thác nó ngay lập tức và cho bạn thời gian để phát hiện ra sự vi phạm. 

Tổng kết

Thực sự SQL Injection đã tồn tại quanh ta từ rất lâu và nó lại đứng đầu bảng xếp hạng các lỗ hổng nguy hiểm nhất hiện tại. Chỉ với vài bước dễ dàng với sự toan tính tốt thì bạn có thể sẽ gặp phải các cuộc tấn công SQL Injection. Chính vì thế, bạn cần tìm cách để tránh trở thành nạn nhân của những cuộc tấn công SQL Injection tiếp theo. Hy vọng với thông tin trên thì bạn đã hiểu được lỗi SQL Injection là gì? Chúc bạn sẽ tìm ra giải pháp và công cụ phù hợp để bảo vệ website của mình trước SQL Injection nhé!
ITNavi - Nền tảng kết nối việc làm IT

Nguồn: Lỗi SQL Injection là gì? Cách diệt tận gốc các lỗi SQL Injection

Bài viết liên quan

NEWSLETTER

Nhập địa chỉ email của bạn dưới đây để đăng ký nhận tin mới nhất

KẾT NỐI VÀ THEO DÕI