MariaDB - Bảo vệ SQL Injection
Hành động đơn giản chấp nhận thông tin nhập của người dùng sẽ mở ra cánh cửa để khai thác. Vấn đề chủ yếu bắt nguồn từ việc quản lý dữ liệu hợp lý, nhưng may mắn thay, khá dễ dàng để tránh những sai sót lớn này.
Cơ hội để đưa vào SQL thường xảy ra khi người dùng nhập dữ liệu như tên và logic mã không phân tích được đầu vào này. Thay vào đó, Code cho phép kẻ tấn công chèn một câu lệnh MariaDB, câu lệnh này sẽ chạy trên cơ sở dữ liệu.
Luôn xem xét dữ liệu do người dùng nhập, nghi ngờ và cần xác thực mạnh mẽ trước khi xử lý. Thực hiện xác nhận này thông qua đối sánh mẫu. Ví dụ: nếu đầu vào mong đợi là tên người dùng, hãy hạn chế các ký tự đã nhập ở các ký tự chữ và số và dấu gạch dưới, và ở một độ dài nhất định. Xem lại một ví dụ dưới đây -
if(check_match("/^\w{8,20}$/", $_GET['user_name'], $matches)) {
$result = mysql_query("SELECT * FROM system_users WHERE user_name = $matches[0]");
} else {
echo "Invalid username";
}
Ngoài ra, sử dụng toán tử REGEXP và mệnh đề LIKE trong việc tạo các ràng buộc đầu vào.
Xem xét tất cả các loại kiểm soát đầu vào rõ ràng cần thiết như:
Kiểm soát các ký tự thoát được sử dụng.
Kiểm soát các kiểu dữ liệu thích hợp cụ thể cho đầu vào. Giới hạn đầu vào cho kiểu và kích thước dữ liệu cần thiết.
Kiểm soát cú pháp của dữ liệu đã nhập. Không cho phép bất cứ thứ gì nằm ngoài khuôn mẫu cần thiết.
Kiểm soát các điều khoản được phép. Danh sách đen các từ khóa SQL.
Bạn có thể không biết sự nguy hiểm của các cuộc tấn công tiêm, hoặc có thể coi chúng là không đáng kể, nhưng chúng đứng đầu danh sách các mối quan tâm về bảo mật. Hơn nữa, hãy xem xét ảnh hưởng của hai mục nhập này -
1=1
-or-
*
Mã cho phép nhập một trong hai mã đó cùng với lệnh phù hợp có thể dẫn đến việc tiết lộ tất cả dữ liệu người dùng trên cơ sở dữ liệu hoặc xóa tất cả dữ liệu trên cơ sở dữ liệu và cả việc chèn mã đều không đặc biệt thông minh. Trong một số trường hợp, những kẻ tấn công thậm chí không dành thời gian kiểm tra các lỗ hổng; họ thực hiện các cuộc tấn công mù với đầu vào đơn giản.
Ngoài ra, hãy xem xét các công cụ đối sánh mẫu và biểu thức chính quy được cung cấp bởi bất kỳ ngôn ngữ lập trình / tập lệnh nào được ghép nối với MariaDB, cung cấp nhiều quyền kiểm soát hơn và đôi khi kiểm soát tốt hơn.