Thứ Năm, 15 tháng 8, 2013

Bảo mật database trong quá trình học lập trình php cơ bản


CSDL là 1 phần quan trọng không thể thể thiếu được trong các ứng dụng web chuyên nghiệp.
Khi chúng ta truy cập CSDL và chấp nhận dữ liệu đầu vào bằng cách tạo ra các câu lệnh truy vấn, nó dễ dàng bị các kẻ gian lợi dụng tấn công SQl injection.


MySQL từ lâu đã là hệ CSDL được dùng phổ biến nhất với PHP vì tính gọn nhẹ, nhanh, miễn phí và được PHP hỗ trợ sẵn. Trong bài viết này chúng ta sẽ tìm hiểu cách kết nối vào CSDL MySQL, truy cập và lưu trữ dữ liệu với PHP. KẾT NỐI VÀO MYSQL SERVER PHP cung cấp hàm mysql_connect để kết nối vèo MySQL server. Cú pháp của hàm này như sau: mysql_connect($...






Bảo mật database trong quá trình học lập trình php cơ bản







SQL injection xuất hiện khi các kẻ tấn công muốn làm các “thử nghiệm” trên form để lấy các thông tin về CSDL. Nó thu thập các thông tin từ các thông báo lỗi SQL . Kẻ tấn công đính vào form một trường injecting SQL, phổ biến nó thường đính vào form đăng nhập


Mã:


?




1


2


3


4


5


6


7


8


9


10


11


12


13


14


15


16


<form method="login.php" action="POST">


Username: <input type="text" name="username" /><br />


Password: <input type="password" name="password" /><br />


<input type="submit" value="Log In" />


</form>


đoạn mã sử lý đăng nhập dễ bị lợi dụng:


$username = $_POST[’username’];



$password = md5($_POST[’password’]);


$sql = "SELECT *


FROM users


WHERE username = ’{$username}’ AND password = ’{$password}’";


/* database connection and query code */


if (count($results) > 0) {


// Successful login attempt


}






Khi kẻ tấn công nhập user là :

username’ OR 1 = 1 -

và mật khẩu để trống thì cấu trúc câu lệnh SQl là:

SELECT *

FROM users

WHERE username = ’username’ OR 1 = 1 –’ AND

password = ’d41d8cd98f00b204e9800998ecf8427e’

điều kiện 1=1 thì luôn đúng câu lệnh SQL bỏ qua tất cả những gì sau ‘–’ vì vậy câu lệnh SQl trên sẽ trả lại tất cả các bản ghi. Bằng cách này hacker dễ dàng đăng nhập vào hệ thống với tài khoản bất kỳ khi đã biết tên tài khoản

Chúng ta tránh được lỗi này bằng cách lọc các kí tự escaping. Bằng cách lọc dữ liệu đầu vào và lọc escaping khi xuất ra chúng ta sẽ tránh được lỗi SQL injection chúng ta lọc escaping bằng nhóm hàm *_escape_string()


Các bạn có thể học hỏi thêm và tham khảo về csdl - mysql ở trang chủ chia sẻ kiến thức học php cơ bản : http://daotaolaptrinh.edu.vn/su-dung-csdl-mysql

Không có nhận xét nào:

Đăng nhận xét