Cách phòng chống

Một phần của tài liệu Nghiên cứu một số phương pháp tấn công web (ĐATN cực hay) (Trang 40 - 43)

CHƯƠNG IV: TẤN CÔNG DATASTORE

4.5 Cách phòng chống

4.5.1 Kiểm tra đầu vào

Để phòng tránh các nguy cơ có thể xảy ra, hãy bảo vệ các câu lệnh SQL là bằng cách kiểm soát chặt chẽ tất cả các dữ liệu nhập nhận được từ đối tượng Request (Request,

Request.QueryString, Request.Form, Request.Cookies, and Request.ServerVariables). Ví dụ, 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 EscapeQuotes để thay thế các dấu nháy đơn bằng 2 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, xp_, … ra khỏi chuỗi dữ liệu nhập từ phía người dùng để hạn chế các tấn công dạng này:

<%

Function KillChars(sInput) dim badChars

dim newChars

badChars = array("select", "drop", ";", "--", "insert", "delete", "xp_") newChars = strInput

for i = 0 to uBound(badChars)

newChars = replace(newChars, badChars(i), "") next

KillChars = newChars End Function

4.5.2 Stored Procedures

Thủ tục lưu trữ đại diện cho những truy vấn được định nghĩa trước trong CSDL.Một thủ tục lưu trữ nhận các giá trị đầu vào và trả về dữ liệu dựa trên những cú pháp đã định sẵn trong thủ tục.Stored procedures có thể chứa những câu lệnh phức tạp với nhiều điều kiện đi kèm

Cú pháp của thủ tục lưu trữ có thể thay đổi ít nhiều giữa các CSDL.Sau đâylà một ví dụ đơn giản về 1 thủ tục lưu trữ nhằm kiểm tra 1 username có trước với mật khẩu ,kết quả trả về là số lượng tìm thấy

CREATE PROCEDRE sp_FooBar(IN user VARCHAR(80), IN passwd CHAR(32), OUT i INT)

BEGIN

SELECT COUNT(id) INTO i FROM UserTable WHERE UserName=user AND Password=passwd; END

Tất nhiên trên thực tế thủ tục lưu trữ có đố phức tạp hơn nhiều ví dụ trên

Không phải tất cả CSDL đều sử dụng thủ tục lưu trữ,đặc biệt lưu ý là PostgreSQL và MySQL 4.x

Ngoài việc cung cấp phương thức thực thi các truy vấn an toàn hơn,thủ tục lưu trữ còn làm tăng hiệu năng truy vấn.

4.5.3 Database Encryption

Nhiều CSDL cung cấp chức năng để mã hóa thông tin bảng và hàng.Việc mã hóa bảng giúp bảo vệ dữ liệu nếu CSDL bị xâm nhập trực tiếp.Việc mã hóa hàng bảo vễ dữ liệu nên chỉ có chủ nhân của dữ liệu mới giải mã được nó.Ví dụ,một cột là user ID,các cột còn lại là những thông tin cá nhân(thông tin tài khoản ngân hàng, số thẻ tín dụng, vv).Nếu tất cả hoặc cột ID được mã hóa(do user ID được dùng để truy vấn) thì hacker sẽ mất nhiều thời gian hơn để giải mã được nó.Nếu cuộc tấn công chỉ sử dụng truy vấn

SELECT và UNION đơn giản thì kết quả trả về chỉ là những dữ liệu không đọc được(dữ liệu mã hóa)

Tất nhiên,đó cũng chưa phải là biên pháp hoàn hảo ngăn chặn cuộc tấn công.Việc tài khoàn bị ăn cắp hay bị dò password là điều hoàn toàn có thể xảy ra.Việc mã hóa cơ sở dữ liệu chỉ ngăn cản những hành động trái phép của user,nó không thể ngăn chặn được những hành vi trái phép(đăng nhập,thực hiện giao dịch…)của kẻ tấn công

4.5.4 Database Configuration

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 đến các quyền như dbo hay sa. Quyền càng bị hạn chế, thiệt hại càng ít. Ngoài ra để tránh các nguy cơ từ SQL Injection attack, nên chú ý loại bỏ bất kì thông tin kĩ thuật nào chứa trong thông điệp chuyển xuống cho người dùng khi ứng dụng có lỗi. Các thông báo lỗi thông thường tiết lộ các chi tiết kĩ thuật có thể cho phép kẻ tấn công biết được điểm yếu của hệ thống.

Một phần của tài liệu Nghiên cứu một số phương pháp tấn công web (ĐATN cực hay) (Trang 40 - 43)

Tải bản đầy đủ (DOC)

(70 trang)
w