Cơ bản về SQL Injection – part I (Giới thiệu)

Cơ bản về SQL Injection – part I (Giới thiệu)

Lỗ hổng SQL Injection là lỗ hổng an ninh ảnh hưởng trực tiếp đến cơ sở dữ liệu và tài nguyên của một hệ thống website. Hầu hết các website hiện nay đều có sử dụng cơ sở dữ liệu như một công cụ để lưu trữ tài nguyên cho mình. Việc quản lý và sử dụng thông tin bằng cơ sở dữ liệu sẽ làm cho thông tin trên website được tổ chức một cách mềm dẻo và tiện lợi hơn. Thông tin mà người sử dụng yêu cầu sẽ được lấy từ cơ sở dữ liệu thông qua các query tại webserver.

Khái quát về SQL Injection

SQL injection là một kỹ thuật chèn vào câu lệnh SQL những đoạn mã bất hợp pháp, lỗ hổng này xảy ra khi thiếu đoạn mã kiểm tra dữ liệu đầu vào trong câu truy vấn SQL. Kết quả là người dùng cuối có thể thực hiện một số truy vấn không mong muốn đối với cơ sở dữ liệu của ứng dụng.

Hiện nay SQL Injection vẫn đang là lỗ hổng khá phổ biến và có nguy cơ rất cao.

Các kỹ thuật khai thác SQL Injection điển hình

Vượt qua kiểm tra lúc đăng nhập

Giả sử để kiểm tra quá trình đăng nhập, người thiết kế web viết đoạn mã PHP như sau:

$username = $_REQUEST["txtUsername"];
$password = $_REQUEST["txtPassword"];
$query = "select * from user where username = '".$username."' and password = '".$password."'";
$result = mysql_query($query);
echo $query;
if(mysql_num_rows($result) == 0)
    echo "Sai mat khau";
else{
    session_start();
    $_SESSION["user"] = $username;
}

Người dùng nhập tên đăng nhập và mật khẩu, giá trị này sẽ được kiểm tra thông qua câu truy vấn:

$query = "select * from user where username = '".$username."' and password = '".$password."'";

Giả sử người dùng nhập vào tên đăng nhập là “min” và mật khẩu là “123456”, câu truy vấn này sẽ là:

select * from user where username = 'min' and password = '123456'

Nếu tên đăng nhập và mật khẩu đúng, câu truy vấn sẽ trả về những bản ghi có tên là “min” và password là “123456”, người dùng sẽ đăng nhập thành công. Tuy nhiên, nếu ta nhập vào một xâu ‘or’1′=’1′#, câu truy vấn sẽ là:

select * from user where username = ''or'1'='1'#' and password = '123456'

Vì mệnh đề or’1′=’1′ luôn trả về giá trị true nên câu truy vấn trên sẽ trả về tất cả các bản ghi trong bảng user. Như thế, ta sẽ đăng nhập thành công với tài khoản của user đầu tiên.

(còn tiếp)

Khi trích dẫn bài viết từ tek.eten.vn, xin vui lòng ghi rõ nguồn. Chúng tôi sẽ rất cảm ơn bạn!