Để 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.
Nguồn
2011-09-07 14:36:08
Đừ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
Sử dụng từ khóa 'bịt kín' để ngăn không cho lớp được kế thừa. – DevDelivery