Sql injection là gì ? Tìm hiểu cách thức tấn công SQL Injection

Sql injection là gì ? Tìm hiểu cách thức tấn công SQL Injection

SQL Injection đúng như cái tên của nó, là cách thức tấn công vào lỗ hổng của website nhằm vào được cơ sở dữ liệu, bằng cách chèn thêm một đoạn query của SQL để làm sai lệch câu lệnh truy vấn, từ đó có thể phá hủy website hoặc lấy cơ sở dữ liệu.

Để cho các bạn dễ hiểu hơn, mình có thể mô tả quy trình thế này:

  1. Hacker tìm form hoặc lỗ hổng qua URL của website.
  2. Hacker chèn lệnh SQL vào lỗ hổng.
  3. Hacker lấy được thông tin mình mong muốn, ví dụ thông tin bài đăng hoặc thông tin của một User, hoặc thông tin đăng nhập của SQL.
  4. Hacker giải mã password của admin, hoặc thay thế mật khẩu của mình vào rồi đăng nhập bằng tài khoản Admin.
  5. Hacker làm những gì hắn muốn !Sql injection là gì ? Tìm hiểu cách thức tấn công SQL Injection  Sql injection là gì ? Tìm hiểu cách thức tấn công SQL Injection

Xem thêm: Nền tảng Bảo mật mạng máy tính (1)

Các kiểu tấn công phổ thông

Tấn công bằng mệnh đề luôn đúng

Những lỗi lập trình này thường xảy ra ở các chức năng tìm kiếm hoặc đăng nhập tài khoản. Ví dụ một câu lệnh SQL như sau:

SELECT * FROM accounts WHERE userName = '{$userName}'

Câu lệnh này đầy sơ hở, chắc là ít người có thể liều lĩnh mà code như vậy, tuy nhiên thực tế thì nó cũng gần như thế mà thôi, rất nhiều trang mắc lỗi này, giờ chúng ta thử xem hacker sẽ thêm cái gì:

' or '1' = '1'

Thì khi truy vấn, câu lệnh của chúng ta sẽ trở thành mệnh đề luôn đúng như dưới đây

SELECT * FROM accounts WHERE userName = '{$userName}' OR '1' = '1'

Câu lệnh này có vế luôn trả về đúng, cho nên câu lệnh luôn thực hiện được, trong trường hợp này thì tài khoản bị mất là cái chắc chắn, hoặc hacker sẽ đăng nhập như admin mà nghịch ngợm phá hoại …

Tấn công phá hoại dữ liệu

Giả sử câu lệnh cũng như trên, nhưng không nhập ‘1’ = ‘1’ nữa mà thêm như sau:

SELECT * FROM accounts WHERE userName = '{$userName}'; DROP TABLE accounts; ''

Dấu ( ; ) dùng để phân tách câu lệnh trong SQL, điều này đồng nghĩa với việc hacker có thể hành động thêm bất kì lệnh gì vào trong câu lệnh trên, rất nguy hiểm, nếu các bạn không có bản backup thì nguy to.

Phòng chống SQl Injection

Hầu hết các mã nguồn mở bây giờ đều không quá lo về lỗi này, tuy nhiên plugin hay module được viết bởi nhiều lập trình viên khác nhau lại hay để ra sơ hở tạo điều kiện cho lỗi phát sinh.

Cách phòng tránh thì có nhiều cách, trong đó:

1. Viết lại đường dẫn

Viết lại đường dẫn của website có thể phòng được lỗi SQL Injection, vì hacker thường phải tìm một sơ hở của website trên đường link hoặc trên form nhập liệu của người dùng, khi không nhìn thấy biến query thì hacker phải tìm cách khác để thử lỗi.

2. Lọc kĩ những gì người dùng nhập

Bài học là đừng bao giờ tin người dùng, kể cả bản thân sẽ giúp bạn phòng lỗi này cực kì hiệu quả, giả dụ như sau:

Với số người dùng nhập vào, để ăn chắc các bạn lọc qua các hàm như:

$num = ( int ) $_POST['num'];
$num = is_numeric ( $num ) ? $num : 0;

Ví dụ sử dụng sprinf:

$data = sprintf('select * from %s where data = %d limit 1', $table, $must_be_number );

Sử dụng kết hợp với mysql_real_escape_string() để câu SQL được an toàn:

$data = sprintf('select * from %s where data = %d limit 1', $table, mysql_real_escape_string($must_be_number ) );

Với các cách trên, bạn có thể yên tâm là câu lệnh của mình khó bị bóp méo qua lỗi SQL Injection !

Xem thêm: An ninh mạng Việt Nam với thách thức bảo mật thông tin cá nhân

Tổng kết

Lỗi SQL Injection là lỗi rất phổ thông, tuy nhiên phòng chống nó là việc hoàn toàn không khó, chỉ cần bạn luôn tự nhủ là với những gì người dùng nhập ta không thể tin bất kì điều gì, phải xác định lại chúng hoặc sử dụng phương pháp ép kiểu hoặc thêm dấu “” vào trong biến người dùng nhập ( addslashes() ) sẽ hạn chế tối đa lỗi này !

Với các mã nguồn mở, chúng ta có thể an tâm phần nào vì hầu hết các câu query đều được lọc qua lọc lại một cách kĩ lưỡng, chỉ phát sinh lỗi này khi chúng ta viết không đúng quy chuẩn mà thôi, các bạn cũng nên để ý sử dụng plugin và module của người dùng xác định được download trên trang chủ nhé !

Các từ khóa tìm kiếm:

  • Sql injection
  • Sql injection la gi
  • Tấn công sql injection
  • Tấn công csdl
  • Hack sql injection

BÌNH LUẬN

Please enter your comment!
Please enter your name here