Danh mục

Bảo mật phần 2

Số trang: 7      Loại file: pdf      Dung lượng: 179.37 KB      Lượt xem: 4      Lượt tải: 0    
Xem trước 2 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Bạn cần bảo đảm bộ thực thi cấp cho assembly của bạn các quyền truy xuất mã lệnh (code access permission) mà các quyền này quyết định sự thành công trong hoạt động của ứng dụng.
Nội dung trích xuất từ tài liệu:
Bảo mật phần 2 1.1 Bảo đảm bộ thực thi cấp cho assembly một số quyền nào đó Bạn cần bảo đảm bộ thực thi cấp cho assembly của bạn các quyền truy xuất mã lệnh (code access permission) mà các quyền này quyết định sự thành công trong hoạt động của ứng dụng. Sử dụng các yêu cầu quyền (permission request) để chỉ định các quyền truy xuất mã lệnh mà assembly cần phải có. Bạn khai báo các yêu cầu quyền bằng các đặc tính quyền truy xuất mã lệnh ở mức assembly.Các yêu cầu quyền cho biết các quyền mà mã lệnh phải có thì mới có thể chạy được. Vídụ, nếu bạn viết một trình xem phim sao cho người dùng có thể sử dụng nó để tải và xemphim từ một server, thật tai hại nếu chính sách bảo mật của người dùng không cho phépchương trình này mở một kết nối mạng đến server. Chương trình của bạn sẽ nạp và chạy,nhưng khi người dùng kết nối đến server để xem phim, chương trình sẽ crash với ngoại lệSystem.Security.SecurityException. Giải pháp là đưa vào assembly yêu cầu quyền cầnthiết để có thể mở một kết nối mạng đến server (System.Net.WebPermission haySystem.Net.SocketPermission, tùy thuộc vào kiểu kết nối bạn cần mở).Bộ thực thi thực hiện các yêu cầu quyền với nguyên tắc: khoan nạp mã lệnh, điều này tốthơn là nạp mã lệnh và thất bại sau khi thực hiện một hành động mà nó không có quyền.Vì vậy, nếu sau quá trình phân giải chính sách bảo mật, bộ thực thi xác định được grant-set của assembly không thể đáp ứng các yêu cầu quyền của assembly, nó sẽ không nạpassembly và ném ngoại lệ System.Security.Policy.PolicyException.Để khai báo một yêu cầu quyền, bạn phải sử dụng bản sao đặc tính (attributecounterpart) của quyền truy xuất mã lệnh bạn cần. Tất cả các quyền truy xuất mã lệnhđều có một bản sao đặc tính mà bạn có thể sử dụng để tạo ra các lệnh bảo mật khai báo(declarative security statement)—bao gồm các yêu cầu quyền. Ví dụ, bản sao đặc tínhcủa SocketPermission là SocketPermissionAttribute, và bản sao đặc tính củaWebPermission là WebPermissionAttribute—Tất cả các quyền và các bản sao đặc tínhcủa chúng cùng theo quy ước đặt tên và là các thành viên của cùng không gian tên.Ứng dụng PermissionRequestExample dưới đây có hai yêu cầu quyền: một choSocketPermission và một cho SecurityPermission. Bạn cần nhớ các điều sau: • Bạn phải khai báo yêu cầu quyền sau bất kỳ lệnh using mức trên nào nhưng trước bất kỳ khai báo kiểu hay không gian tên nào. • Đặc tính phải nhắm đến assembly nên bạn phải thêm tiền tố assembly: vào tên đặc tính. • Không cần thêm phần Attribute vào tên đặc tính—mặc dù bạn có thể thêm vào nếu muốn. • Bạn phải chỉ định SecurityAction.RequestMinimum là đối số đầu tiên của đặc tính—giá trị này cho biết đây là một yêu cầu quyền. • Bạn phải cấu hình đặc tính để mô tả quyền truy xuất mã lệnh mà bạn cần bằng các thuộc tính của đặc tính. Bạn hãy tham khảo tài liệu .NET Framework SDK để biết thêm chi tiết về các thuộc tính do mỗi đặc tính bảo mật truy xuất mã lệnh hiện thực. • Các lệnh yêu cầu quyền không được kết thúc bằng dấu chấm phẩy (;). • Để tạo nhiều yêu cầu quyền, chỉ cần thêm nhiều lệnh yêu cầu quyền như được trình bày trong ví dụ dưới đây: using System.Net; using System.Security.Permissions; // Yêu cầu SocketPermission (cho phép mở một kết nối // TCP đến host và port được chỉ định). [assembly:SocketPermission(SecurityAction.RequestMinimum, Access = Connect, Host = www.fabrikam.com, Port = 3538, Transport = Tcp)] // Yêu cầu phần tử UnmanagedCode của SecurityPermission, // (kiểm soát khả năng thực thi mã lệnh không-được-quản-lý). [assembly:SecurityPermission(SecurityAction.RequestMinimum, UnmanagedCode = true)] public class PermissionRequestExample { public static void Main() { // Làm gì đó... } }Nếu bạn thực thi ứng dụng PermissionRequestExample và chính sách bảo mật không cấpcho assembly này các quyền được yêu cầu, bạn sẽ nhận được ngoại lệ PolicyExceptionnhư dưới đây và ứng dụng sẽ không thực thi. Khi sử dụng chính sách bảo mật mặc định,điều này sẽ xảy ra nếu bạn chạy assembly từ một mạng dùng chung vì các assembly đượcnạp từ Intranet không được cấp SocketPermission.Unhandled Exception: System.Security.Policy.PolicyException:Required permission cannot be acquired.Khi bạn nạp một assembly từ bên trong mã lệnh (tự động hay bằng tay), và assembly nàycó chứa các yêu cầu quyền mà chính sách bảo mật không đáp ứng thì phương thức màbạn sử dụng để nạp assembly sẽ ném ngoại lệ PolicyException, do đó bạn phải thụ lý saocho phù hợp. 1.2 Giới hạn các quyền được cấp cho assembly Bạn cần hạn chế các quyền truy xuất mã lệnh được cấp cho assembly của bạn, đảm bảo người khác và phần mềm khác không thể biến mã lệnh của bạn thành một cơ chế mà thông qua đó để thực hiện các hành động nguy hiểm hay không mong muốn. Sử dụng các lệnh bảo mật khai báo (declarative security statement) để chỉ định các yêu cầu quyền tùy chọn (optional permission request) và các yêu cầu loại trừ quyền (permission refusal request) trong assembly của bạn. Các yêu cầu quyền tùy chọn định nghĩa tập tối đa các quyền mà bộ thực thi sẽ cấp cho assembly. Các yêu cầu loại trừ quyền chỉ định các quyền cụ thể mà bộ thực thi sẽ không cấp cho assembly.Nếu quan tâm đến bảo mật, thật lý tưởng khi mã lệnh của bạn chỉ có các quyền truy xuấtmã lệnh cần thiết để thực hiện chức năng của nó. Điều này giảm thiểu nguy cơ ngườikhác và mã lệnh khác sử dụng mã lệnh của bạn để thực hiện các hành động nguy hiểmhay không mong muốn. Vấn đề là, bộ thực thi phân giải các quyền của một assemblybằng chính sách bảo mật (do một người dùng nào đó hay người quản trị cấu hình). Chínhsách bảo mật có thể khác nhau tại mỗi nơi mà ứng dụng chạy, và bạn không thể kiểm soátcác quyền mà chính sách bảo mật ấn định cho mã lệnh của bạn.Mặc dù bạn không thể kiểm soát chí ...

Tài liệu được xem nhiều: