2.2. MỘT SỐ KỸ THUẬT TẤN CÔNG SQL INJECTION
2.2.5.1. Các phương pháp viết mã lệnh có bảo vệ
Cái gốc gây ra các lỗ hổng cho vấn đề tiêm SQL là việc xác nhận giá trị đầu vào là chưa đủ. Bởi vậy giải pháp đơn giản để loại bỏ các lỗ hổng này là áp dụng các phương pháp viết mã có bảo vệ phù hợp. Dưới đây sẽ trình bày tóm tắt một số cách để ngăn chặn các lỗ hổng cho vấn đề tiêm SQL.
• Kiểm tra kiểu dữ liệu đầu vào: SQLIA có thể được thực hiện bằng
cách tiêm các lệnh vào trong tham số có kiểu dữ liệu là kiểu chuỗi hoặc kiểu số. Một thao tác đơn giản kiểm tra các đầu vào có thể ngăn chặn được nhiều tấn cơng. Ví dụ, trong trường hợp các đầu vào là số, người phát triển có thể từ chối bất kỳ các đầu vào có chứa ký tự khơng phải là ký tự số. Nhiều nhà phát triển tình cờ bỏ việc kiểm tra này bởi vì đầu vào người dùng luôn được biểu diễn theo dạng chuỗi, không để ý tới nội dung của nó hoặc cách sử dụng theo mong muốn.
• Biến đổi các đầu vào: Phương pháp tiêm vào tham số dạng chuỗi là
Nghiên cứu tìm hiểu một số dạng tấn công SQL Injection vào hệ quản trị CSDL Microsoft SQL Server
các SQL tokens. Các ký tự này đánh lừa bộ phân tích SQL trong q trình biên dịch dữ liệu vào. Tuy nhiên nó có thể ngăn chặn được việc sử dụng các ký tự meta, nhưng làm giảm khả năng của người dùng bình thường để xác định các đầu vào hợp pháp. Một giải pháp tốt hơn là sử dụng các hàm biến đổi chuỗi theo cách mà tất cả các ký tự meta bị biến đổi một cách tách biệt và được cơ sở dữ liệu biên dịch coi như là các ký tự thơng thường.
• Tìm kiếm mẫu tin cậy (Positive pattern matching): Nhà phát triển nên
thiết lập các thủ tục xác nhận đầu vào để xác định đầu vào tốt khi tương phản với đầu vào xấu. Hướng tiếp cận này được gọi là xác thực tính hợp lệ tin cậy, tương phản là xác thực tính hợp lệ khơng tin cậy, đó là cách tìm kiếm đầu vào trên các mẫu hoặc SQL token bị ngăn cấm. Bởi vì nhà phát triển có thể khơng hình dung được hết các cách kiểu tấn cơng có thể được thực hiện chống lại ứng dụng, nhưng họ có thể xác định được tất cả các dạng đầu vào hợp lệ, xác nhận tính hợp lệ tin cậy là cách an tồn hơn để kiểm tra các đầu vào.
• Nhận biết tất cả các nguồn đầu vào: Nhà phát triển phải kiểm tra tất
cả đầu vào cho ứng dụng. Bởi vì có khả năng là có nhiều nguồn đầu vào cho ứng dụng. Nếu như được sử dụng để tạo câu truy vấn, thì các nguồn đầu vào này có thể là một cách để kẻ tấn công thực hiện SQLIA. Tuyệt đối các nguồn đầu vào này phải được kiểm tra. Mặc dù cách viết mã có bảo vệ vẫn là cách tốt nhất để ngăn chặn các lỗ hổng SQL injection nhưng ứng dụng chúng trong thực thế là khó giải quyết. Phương pháp viết mã có bảo vệ là dễ gây ra lỗi con người và không được áp dụng một cách chặt chẽ và đầy đủ như là các kỹ thuật được tự động. Trong thực tế, nhiều lỗ hổng cho vấn đề tiêm SQL bị khám phá bên trong ứng dụng thực là do lỗi của con người: nhà phát triển quên không kiểm tra hoặc khơng thực hiện việc xác nhận tính hợp lệ của đầu vào. Theo nghĩa khác, nhà phát triển đang cố gắng phát hiện và ngăn chặn SQLIA, nhưng không thể thực hiện một cách thỏa đáng và trong mọi nơi cần thiết.
Nghiên cứu tìm hiểu một số dạng tấn cơng SQL Injection vào hệ quản trị CSDL Microsoft SQL Server