Bảo vệ cơ sở dữ liệu Access trong các ứng dụng Web

474

Các ứng dụng web sử dụng CSDL Access thường hay đặt tập tin CSDL .mdb vào một thư mục có thể truy cập được từ web, ví dụ như: D:\inetpub\wwwroot\myDB.mdb. Điều nguy hiểm nhất theo cách làm thông thường này là nếu người dùng biết được hay đoán được đường dẫn đến tập tin .mdb, họ có thể tải tập tin CSDL đó về và toàn bộ thông tin lưu trữ trên CSDL bị đánh cắp.

Để bảo vệ CSDL Access trong các ứng dụng web, nên kết hợp các phương án an toàn sau:

Phương án 1: Đặt tập tin CSDL .mdb vào thư mục được không được quyền truy cập từ Web.

Giả sử ta có website có thư mục webroot là D:\inetpub\wwwroot\. Thư mục chứa tập tin CSDL ví dụ là: D:\inetpub\wwwroot\Site1\data\myDB.mdb. Mặc định nếu người dùng đoán được đường dẫn này: http//www.yourserver.com/site1/data/myDB.mdb, họ có thể tải được tập tin CSDL này về bởi vì thông thường các tập tin trong thư mục này được thiết lập quyền Read.

Để hạn chế không cho phép người dùng tải tập tin CSDL về, ta sẽ bỏ quyền Read được thiết lập trong thư mục này bằng cách dùng tiện ích Internet Service Manager.

Bảo vệ cơ sở dữ liệu Access trong các ứng dụng Web

Thao tác này không ảnh hưởng gì đến việc các đoạn mã ASP truy cập đến CSDL do thiết lập này được đặt ở mức webserver chứ không phải ở mức hệ thống tập tin NTFS.

Nghĩa là các đoạn mã ASP vẫn hoạt động bình thường như trước. Điểm khác duy nhất là người dùng không thể tải được tập tin CSDL dù biết đường dẫn đến nó mà thôi.

Phương án 2: Đặt tập tin CSDL .mdb tại nơi mà chỉ truy cập được ở mức server-side

Ý tưởng chính của phương án này là đặt tập tin CSDL trong một thư mục có cấp cao hơn thư mục webroot của webserver. Ví dụ, nếu thư mục D:\inetpub\wwwroot\ là webroot của webserver, ta có thể tạo một thư mục private đặt tại D:\inetpub\private và đặt tập tin CSDL vào đây. Bằng cách này, người dùng client không thể nào truy cập đến thư mục private này để tải CSDL về. Lúc này, đường dẫn đến tập tin CSDL trong chuỗi DSN sẽ được chỉnh lại như sau:

– Nếu dùng đường dẫn tuyệt đối: sFileName = “D:\inetpub\private”

– Nếu dùng đường dẫn tương đối:

sFileName = Server.MapPath(“/”) ‘ trả về giá trị D:\inetpub\wwwroot
sFileName = Replace(sFileName, “wwwroot”, “private”)
sFileName = sFileName & “myDB.mdb”