- Kiểm tra dữ liệu đầu vào:
Kiểm tra tính đúng đắn của dữ liệu là một vấn đề phức tạp và thƣờng chƣa đƣợc quan tâm đúng mức trong các ứng dụng. Khuynh hƣớng của việc kiểm tra tính đúng đắn của dữ liệu không phải chỉ là cần thêm một số chức năng vào ứng dụng, mà phải kiểm tra một cách tổng quát nhanh chóng để đạt đƣợc mục đích.
Để phòng tránh các nguy cơ có thể xảy ra, ta bảo vệ các câu lệnh SQL bằng cách kiểm soát chặt chẽ tất cả dữ liệu nhận đƣợc từ đối tƣợng yêu cầu (Request):
Request, Request.QueryString, Request.Form, Request.Cookies, and Request.ServerVariabl.
Chỉ chấp nhận những dữ liệu hợp lệ bằng cách kiểm tra dữ liệu đầu vào sử dụng hàm sau:
function validatepassword( input ) good_password_chars =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" validatepassword = true
for i = 1 to len( input ) c = mid( input, i, 1 )
if ( InStr( good_password_chars, c ) = 0 ) then end if
next
end function
validatepassword = false exit function
Ngoài ra, ta có thể giới hạn chiều dài của chuỗi nhập liệu, hoặc xây dựng hàm Escape Quotes để thay thế các dấu nháy đơn bằng hai dấu nháy đơn nhƣ:
<% Function EscapeQuotes(sInput) sInput = replace(sInput, " ' ", " ' ' ") EscapeQuotes = sInput 5 End Function %>
Trong trƣờng hợp dữ liệu nhập vào là số, lỗi xuất phát từ việc thay thế một giá trị đƣợc tiên đoán là dữ liệu số bằng chuỗi chứa câu lệnh SQL bất hợp pháp. Để tránh điều này, đơn giản hãy kiểm tra dữ liệu có đùng kiểu hay không bằng hàm IsNumeric().
Ngoài ra, có thể xây dựng hàm loại bỏ một số kí tự và từ khóa nguy hiểm nhƣ: ; , - -, select, insert,... ra khỏi dữ liệu từ phía ngƣời dùng để hạn chế các tấn công dạng này.
- Thiết lập cấu hình an toàn cho hệ quản trị cơ sở dữ liệu:
Cần có cơ chế kiểm soát chặt chẽ và giới hạn quyền xử lý dữ liệu đến tài khoản ngƣời dùng mà ứng dụng Web đang sử dụng. Các ứng dụng thông thƣờng
nên tránh dùng các quyền nhƣ: quản trị cơ sở dữ liệu (dba) hay quản trị hệ thống (sa). Quyền càng bị hạn chế, thiệt hại càng ít.
Để bảo vệ SQL Server ta cần thực hiện các công việc sau:
+ Xác định phƣơng pháp kết nối đến SQL Server: Dùng tiện ích Network Utility để kiểm tra rằng chỉ có các thƣ viện mạng đang dùng là hoạt động.
+ Kiểm tra tất cả các tài khoản có trong SQL Server: Chỉ tạo tài khoản có quyền thấp cho ứng dụng; loại bỏ những tài khoản không cần thiết; đảm bảo rằng tất cả các tài khoản có một mật khẩu hợp lệ,...
+ Kiểm tra các đối tƣợng tồn tại: Nhiều extended stored procedure có thể đƣợc xóa bỏ một cách an toàn. Nếu điều này đƣợc thực hiện, thì cũng nên xem xét việc loại bỏ luôn những tệp tin .dll chứa mã các extended stored procuedure; Xóa bỏ tất cả cơ sở dữ liệu mẫu nhƣ “northwind‖ và ―pubs‖ ;
- Xóa các stored procedure không dùng nhƣ: master..xp_cmdshell, xp_startmail,
xp_sendmail, sp_makeWebtask.
- Kiểm tra những tài khoản nào có thể truy xuất đến những đối tƣợng nào: Đối với những tài khoản có một ứng dụng nào đó dùng để truy xuất cơ sở dữ liệu thì chỉ đƣợc cấp những quyền hạn cần thiết tối thiểu để truy xuất đến những đối tƣợng nó cần dùng.