2011-09-05 31 views
19

Tôi đang cố thêm addons vào ứng dụng của mình, nhưng tôi không muốn addon sử dụng sự phản chiếu, mã addon có thể là sandbox bằng Application Domain.Cách từ chối phản chiếu bằng ReflectionPermission

Tôi đã tìm thấy một AppDomain example tại MSDN, nhưng không có bất kỳ tham chiếu nào cho ReflectionPermision, và cũng thuộc tính bảo mật Từ chối được khấu hao, nhiều thuộc tính bị khấu hao, làm cách nào để dừng phản chiếu?

Trả lời

8

Để sử dụng AppDomain.CreateDomain để tạo một tên miền ứng dụng hộp cát, bạn nên vượt qua trong một PermissionSet chỉ chứa các quyền mà bạn muốn cấp cho các cụm hộp cát. Nếu bạn không muốn cấp ReflectionPermission, bạn chỉ cần không thêm nó vào tập hợp quyền.

Điều đó nói rằng, ReflectionPermission nằm cách xa quyền "nguy hiểm" duy nhất mà thường sẽ bị từ chối với bổ trợ nguồn chung. Nếu bạn muốn rất nghiêm ngặt, bạn có thể xem xét việc chỉ cấp SecurityPermission \ Execution. ví dụ::

PermissionSet permissionSet = new PermissionSet(PermissionState.None); 
permissionSet.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution)); 

Nếu bạn muốn bao gồm bổ sung "an toàn" cho phép, bạn chỉ có thể thêm chúng vào các thiết lập cho phép sử dụng các cuộc gọi AddPermission bổ sung. Nếu bạn muốn bao gồm tất cả các quyền được coi là đủ an toàn để được cấp mã nguồn internet theo hệ thống chính sách CAS bị trục trặc, bạn có thể trích xuất các điều khoản này bằng cách chuyển các bằng chứng vùng internet sang phương thức tĩnh SecurityManager.GetStandardSandbox. ví dụ::

Evidence evidence = new Evidence(); 
evidence.AddHostEvidence(new Zone(SecurityZone.Internet)); 

PermissionSet permissionSet = SecurityManager.GetStandardSandbox(evidence); 

N.B.: Cả hai cách tiếp cận này đều được mô tả trong số MSDN article mà bạn đã tham chiếu trong câu hỏi của mình.

0

Theo tài liệu, ReflectionPermission là điều bạn cấp để cấp quyền truy cập mã cho các thành viên riêng tư và được bảo vệ. Theo mặc định nó không được cấp và mã chỉ có quyền truy cập vào các thành viên công cộng. Nếu bạn đang cố gắng ẩn các thành viên công khai, bạn sẽ cần tạo một giao diện mới không hiển thị chúng.

+0

Đừng quên rằng mã độc * có thể * truy cập các thành viên được bảo vệ, bằng cách kế thừa từ lớp. Tuy nhiên, nó không thể truy cập các thành viên được bảo vệ của các đối tượng hiện có. – svick

+4

Sử dụng từ khóa 'bịt kín' để ngăn không cho lớp được kế thừa. – DevDelivery

Các vấn đề liên quan