SQL Injection

 Đúng như tiêu đề, hôm nay ta sẽ bàn về SQL Injection và tác hại khủng khiếp mà nó có thể gây ra. Mong mọi người sẽ thích bài viết này

1) SQL Injection là cái gì:

SQL Injection là một phương pháp tấn công của các hacker lợi dụng những lỗ hổng của câu truy vấn của các ứng dụng. Được thực hiện bằng cách chèn thêm 1 đoạn SQL để làm sai đi câu lệnh truy vấn ban đầu, từ đó hack được vào database. Nghe thôi đã nguy hiểm rồi đúng không. Lỗ hổng cho phép hacker thực hiện các thao tác như một Admin, trên cơ sở dữ liệu của ứng dụng.

Ví dụ, trong form đăng nhập, người dùng nhập dữ liệu, trong trường tìm kiếm người dùng nhập văn bản tìm kiếm, trong biểu mẫu lưu dữ liệu, người dùng nhập dữ liệu cần lưu. Tất cả các dữ liệu được chỉ định này đều đi vào cơ sở dữ liệu.

Thay vì nhập dữ liệu đúng, các hacker lợi dụng những lỗ hổng để chèn và thực thi các câu lệnh SQL bất hợp pháp để lấy dữ liệu người dùng... SQL Injection được thực hiện với ngôn ngữ lập trình SQL. SQL (Structured Query Language) được sử dụng để quản lí dữ liệu được lưu trữ trong toàn bộ cơ sở dữ liệu.

Tuy nhiên ngày nay chúng ta thường làm viejc trên những framework hiện đại. Các framework đều đã dược test cẩn thận để phòng tránh các lỗi, trong đó có SQL Injection.

2) Tác hại:

  • Hack tài khoản cá nhân
  • Ăn cắp hoặc sao chép dữ liệu của trang web hoặc hệ thống
  • Thay đổi dữ liệu nhạy cảm của hệ thống
  • Xóa dữ liệu nhạy cảm và quan trọng của hệ thống
  • Người dùng có thể đăng nhập vào ứng dụng với tư cách người dùng khác, ngay cả với tư cách quản trị viên
  • Người dùng có thể xem thông tin cá nhân thuộc về những người dùng khác, ví dụ chi tiết hồ sơ của người dùng khác, chi tiết giao dịch của họ...
  • Người dùng có thể sửa đổi cấu trúc của cơ sở dữ liệu, thậm chí xóa các bảng trong cơ sở dữ liệu ứng dụng,
  • Người dùng có thể kiểm soát máy chủ cơ sở dữ liệu và thực thi lệnh theo ý muốn
3) Cách khai thác:

Nói về cách khai thác thì nó cũng không có gì phức tạp. Đôi khi ta chỉ cần nhập ' hoặc " vào các trường như là nhập username, password, email..... Nếu nó trả về bất kì thông báo nào bất thường thì ta có thể chắc chắn rằng là SQL Injection đang tồn tại trong hệ thống này. Giả sử ta có trường đăng nhập như bên dưới:

và đoạn code server xử lí:

if(isset($_POST['username']) && isset($_POST['password'])){
$sql = "SELECT * FROM tbl_user WHERE username='". $_POST['username'] . "' AND password = '" .$_POST['password'] ."'";
}
Nếu như ta không nhập như một người bình thường mà ta nhập thêm ' hoặc là " thì code sẽ lỗi ngay. Và từ cái này có thể chèn thêm nhiều lệnh nguy hiểm khác...

Hoặc ví dụ điển hình nhất bây giờ, không ai khác ngoài BKAV - công ti "siêu bảo mật" dính SQL Injection...

*Các phần dễ bị tấn công:
  • Form đăng nhập
  • Form tìm kiếm
  • Form nhận xét
  • Bất kì trường nhập hoặc lưu đầu vào của dữ liệu
  • Liên kết của website
Cần lưu ý trong khi thử nghiệm chống lại tấn công này là không thể chỉ kiểm tra một hoặc vài trường bởi vì một trường có thể được bảo vệ nhưng trường khác thì không. Do đó điều quan trọng nhất là hãy kiểm tra toàn bộ.

4) Cách phỏng tránh:
Đơn giản thôi, luôn kiểm tra kĩ lưỡng các trường nhập đầu vào và các bạn cần ràng buộc thật kỹ dữ liệu của người dùng nhập vào. Và có rất nhiều công cụ hỗ trợ ta việc này, nổi tiếng nhất là RegEx. Và thay vì code thuần thì ta nên dùng các Framework. Framework luôn có cộng đồng hoặc các chuyên gia bảo mật giúp tìm lỗi và update liên tục, từ đó chúng ta có thể giảm bớt thời gian xử lí lỗi để tăng thời gian làm sản phẩm cũng là 1 điều hay

Trên đây là tất cả những gì mình biết về SQL Injection, rất mong mọi người thích bài viết của mình. Bye bye mọi người và hẹn gặp lại trong những bài viết sắp tới

Nhận xét

Bài đăng phổ biến