Trang chủ » Thiết kế web » SQL INJECTION LÀ GÌ?

SQL INJECTION LÀ GÌ?

27 Lượt xem

SQL Injection không còn là khái niệm quá mới, nhưng nó vẫn là một trong những kiểu tấn công mạng khá phổ biến. Bài viết dưới đây sẽ giới thiệu đến các bạn cách phòng chống tấn công SQL Injection. Để bạn đọc hiểu về cách thức tấn công này, từ đó có những biện pháp phòng ngừa, bảo vệ website và hệ thống của mình.

SQL INJECTION LÀ GÌ?

SQL Injection là gì

SQL injection là một trong những kiểu hack web, kĩ thuật này cho phép những kẻ tấn công lợi dụng lỗ hổng của việc kiểm tra dữ liệu đầu vào trong các ứng dụng web. Bằng cách inject các mã SQL query/command vào input trước khi chuyển cho ứng dụng web xử lí, bạn có thể login mà không cần username và password, remote execution (thực thi từ xa), dump data và lấy root của SQL server.

– SQL injection có thể cho phép những kẻ tấn công thực hiện các thao tác như một người quản trị web, trên cơ sở dữ liệu của ứng dụng. Nó thường được biết đến như là một vật trung gian tấn công trên các ứng dụng web có dữ liệu được quản lý bằng các hệ quản trị cơ sở dữ liệu có cấu trúc như SQL Server, MySQL, Oracle,…

Tuy nhiên các bạn hãy yên tâm vì dạo gần đây các framework đều đã được test cẩn thận để phòng tránh các lỗi xảy ra, trong đó có cả SQL Injection.

TẠI SAO SQL INJECTION LẠI “NGUY HIỂM”?

SQL Injection là gì
SQL Injection là gì

Đọc qua khái niệm về SQL Injection các bạn đã hiểu sơ sơ về nó rồi đúng không nào. Dưới đây sẽ là lý do vì sao các bạn nên phòng chống sql injection.

  • Với SQL Injection hacker có thể truy cập một phần hoặc toàn bộ dữ liệu trong hệ thống. Điều này có thể gây ra những thiệt hại nặng nề.
  • Lỗ hổng này rất nổi tiếng, từ developer đến hacker gần như ai cũng biết. Ngoài ra, còn có 1 số tool tấn công SQL Injection cho dân “ngoại đạo”, những người không biết gì về lập trình.
  • Rất nhiều ông lớn từng bị dính – Sony, Microsoft UK. Mọi vụ lùm xùm liên quan tới “lộ dữ liệu người dùng” ít nhiều đều dính dáng tới SQL Injection.

Dễ tấn công, phổ biến, gây ra hậu quả nghiêm trọng, đó là lý dó Inject (Không chỉ SQL mà OS và LDAP) nằm chễm chễ ở vị trí đầu bảng trong top 10 lỗ hỗng bảo mật của OWASP. Tất nhiên là XSS, CSRF, và không mã hoá dữ liệu cũng nằm trong list này nốt.

HẬU QUẢ CỦA SQL INJECTION

SQL Injection là gì
SQL Injection là gì
  • Hậu quả lớn nhất mà SQL Injection gây ra là: Làm lộ dữ liệu trong database. Tuỳ vào tầm quan trọng của dữ liệu mà hậu quả dao động ở mức nhẹ cho đến vô cùng nghiêm trọng.
  • Lộ dữ liệu khách hàng có thể ảnh hưởng rất nghiêm trọng đến công ty. Hình ảnh công ty có thể bị ảnh hưởng, khách hàng chuyển qua sử dụng dịch vụ khác, dẫn đến phá sản v…v…
  • Lỗ hỗng này cũng ảnh hưởng lớn đến khách hàng. Do họ thường dùng chung một mật khẩu cho nhiều tài khoản. Chỉ cần lộ mật khẩu một tài khoản thì các tài khoản khác cũng lộ theo.
  • Đây cũng là lý do mình nhắc nhở phải mã hoá mật khẩu, nếu database có bị tấn công thì người dùng cũng không bị mất mật khẩu.
  • Trong nhiều trường hợp, hacker không chỉ đọc được dữ liệu mà còn có thể chỉnh sửa dữ liệu. Lúc này hacker có thể đăng nhập dưới vai trò admin. Chúng lợi dụng hệ thống, hoặc xoá toàn bộ dữ liệu để hệ thống ngừng hoạt động.

 CÁCH PHÒNG CHỐNG SQL INJECTION

SQL Injection là gì
SQL Injection là gì

Mặc dù SQL này rất dễ tấn công nhưng nó cũng rất dễ phòng chống. Gần đây, hầu như chúng ta ít viết SQL thuần mà toàn sử dụng ORM (Object-Relational Mapping) framework. Các framework web này sẽ tự tạo câu lệnh SQL nên hacker cũng khó tấn công hơn.

Tuy nhiên, có rất nhiều site vẫn sử dụng SQL thuần để truy cập dữ liệu. Đây chính là mồi ngon cho hacker. Để bảo vệ bản thân trước SQL Injection, ta có thể thực hiện các biện pháp sau.

1. LỌC DỮ LIỆU TỪ NGƯỜI DÙNG

Cách phòng chống này tương tự như XSS. Ta sử dụng filter để lọc các kí tự đặc biệt (; ” ‘) hoặc các từ khoá (SELECT, UNION) do người dùng nhập vào. Nên sử dụng thư viện/function được cung cấp bởi framework. Viết lại từ đầu vừa tốn thời gian vừa dễ sơ sót.

2. KHÔNG CỘNG CHUỖI ĐỂ TẠO SQL

Sử dụng parameter thay vì cộng chuỗi. Nếu dữ liệu truyền vào không hợp pháp, SQL Engine sẽ tự động báo lỗi, ta không cần dùng code để check.

3. KHÔNG HIỂN THỊ EXCEPTION, MESSAGE LỖI

Hacker dựa vào message lỗi để tìm ra cấu trúc database. Khi có lỗi, ta chỉ hiện thông báo lỗi chứ đừng hiển thị đầy đủ thông tin về lỗi, tránh hacker lợi dụng.

4. PHÂN QUYỀN RÕ RÀNG TRONG DB

Nếu chỉ truy cập dữ liệu từ một số bảng, hãy tạo một account trong DB, gán quyền truy cập cho account đó chứ đừng dùng account root hay sa. Lúc này, dù hacker có inject được sql cũng không thể đọc dữ liệu từ các bảng chính, sửa hay xoá dữ liệu.

5. BACKUP DỮ LIỆU THƯỜNG XUYÊN

Các cụ có câu “cẩn tắc vô áy náy”. Dữ liệu phải thường xuyên được backup để nếu có bị hacker xoá thì ta vẫn có thể khôi phục được. Còn nếu cả dữ liệu backup cũng bị xoá luôn thì … chúc mừng bạn, update CV rồi tìm cách chuyển công ty thôi!

 KẾT LUẬN

Dữ liệu (Database) là một trong những thứ quan trọng nhất trong website của bạn. Vì thế việc bảo mật trang web của bạn đối với hacker là rất cần thiết. SQL Injection rất nguy hiểm nhưng đồng thời nó cũng rất dễ fix