1. Trang chủ
  2. » Công Nghệ Thông Tin

Các giải pháp lập trình CSharp- P64 ppsx

10 199 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 2,65 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Sử dụng yêu cầu quyền tối thiểu, bạn có thể bao đam răng bộ thực thi cấp cho assembly tập các quyền đã được chỉ định; nếu mã lệnh của bạn đang chạy, bạn có thể chắc rằng nó có các quyền

Trang 1

Sử dụng công cụ Permissions View (Permview.exe—được cấp cùng với NET

Framework SDK).

Để cấu hình chính sách bảo mật một cách phù hợp, bạn cần biết các nhu cầu quyền truy xuất

mã lệnh (code access permission requirements) của các assembly mà bạn dự định sẽ chạy

Điều này đúng cho cả các thư viện và các assembly thực thi được truy xuất từ ứng dụng của bạn Đối với thư viện, bạn cần biết assembly loại bỏ những quyền nào để không sử dụng thư viện này để thực hiện một hành động bị hạn chế (sẽ dẫn đến ngoại lệ

System.Security.SecurityException)

Công cụ Permview.exe cung cấp một cơ chế đơn giản mà thông qua đó, bạn có thể xem các yêu cầu quyền khai báo (declarative permission request) được tạo bên trong một assembly— bao gồm yêu cầu tối thiểu (minimum request), yêu cầu tùy chọn (optional request), và yêu cầu loại trừ (refusal request) Ví dụ, lớp dưới đây khai báo một cầu tối thiểu, một yêu cầu tùy

chọn, và một yêu cầu loại trừ:

using System.Net;

using System.Security.Permissions;

// Yêu cầu quyền tối thiểu: SocketPermission.

[assembly:SocketPermission(SecurityAction.RequestMinimum,

Unrestricted = true)]

// Yêu cầu quyền tùy chọn: SecurityPermission.

[assembly:SecurityPermission(SecurityAction.RequestOptional,

Unrestricted = true)]

// Yêu cầu loại trừ quyền: FileIOPermission.

[assembly:SecurityPermission(SecurityAction.RequestRefuse,

Unrestricted = true)]

public class PermissionViewExample {

public static void Main() {

// Làm gì đó

}

}

Thực thi lệnh permview PermissionViewExample.exe sẽ sinh ra kết xuất như sau Mặc dù không mấy thân thiện nhưng bạn vẫn có thể đọc kết xuất để xác định các yêu cầu quyền được tạo bởi assembly Mỗi kiểu trong ba kiểu yêu cầu quyền—tối thiểu, tùy chọn, và loại trừ—

được liệt kê dưới một tiêu đề riêng và được kết cấu ở dạng XML của một đối tượng

System.Security.PermissionSet

Trang 2

Microsoft (R) NET Framework Permission Request Viewer

Version 1.1.4322.510

Copyright (C) Microsoft Corporation 1998-2002 All rights reserved.

minimal permission set:

<PermissionSet class="System.Security.PermissionSet" version="1">

<IPermission class="System.Net.SocketPermission, System,

Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"

version="1" Unrestricted="true"/>

</PermissionSet>

optional permission set:

<PermissionSet class="System.Security.PermissionSet" version="1">

<IPermission class="System.Security.Permissions.SecurityPermission,

mscorlib, Version=1.0.5000.0, Culture=neutral,

PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true"/>

</PermissionSet>

refused permission set:

<PermissionSet class="System.Security.PermissionSet" version="1">

<IPermission class="System.Security.Permissions.SecurityPermission,

mscorlib, Version=1.0.5000.0, Culture=neutral,

PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true"/>

</PermissionSet>

Bằng cách chỉ định đối số /decl khi chạy tiện ích Permview.exe, bạn có thể xem

tất cả các lệnh bảo mật khai báo (declarative security statement) nằm trong một

assembly Việc này cho thấy rõ những gì assembly thực hiện bên trong và cho phép bạn cấu hình chính sách bảo mật một cách phù hợp Tuy nhiên,

Permview.exe không hiển thị các thao tác bảo mật bắt buộc (imperative security operation) nằm trong một assembly Hiện không có cách nào để trích và tổng kết

các thao tác bảo mật bắt buộc được thực thi bên trong một assembly.

7. Xác đ nh mã l nh có quy n nào đó lúc th c thi hay không Xác đ nh mã l nh có quy n nào đó lúc th c thi hay không ị ị ệ ệ ề ề ự ự

Bạn cần xác định assembly của bạn có một quyền cụ thể nào đó lúc thực thi hay

không.

Trang 3

Tạo và cấu hình quyền mà bạn muốn kiểm tra rồi truyền nó cho phương thức

tĩnh IsGranted của lớp System.Security.SecurityManager.

Sử dụng yêu cầu quyền tối thiểu, bạn có thể bao đam răng bộ thực thi cấp cho assembly tập các quyền đã được chỉ định; nếu mã lệnh của bạn đang chạy, bạn có thể chắc rằng nó có các quyền tối thiểu đã được yêu cầu Tuy nhiên, bạn có thể muốn hiện thực một chức năng có tính

“cơ hội” sao cho ứng dụng có thể cung cấp chức năng đó chỉ khi bộ thực thi cấp cho assembly của bạn các quyền phu hợp Cách tiếp cận này được chính thức hóa một phần bằng các yêu cầu quyền tùy chọn, cho phép bạn định nghĩa một tập các quyền mà mã lệnh của bạn có thể tân dụng nếu chính sách bảo mật cấp chúng, nhưng lại không thiết yếu đôi với sư vân hành thành công cua ma lênh (mục 13.5 đã trình bày chi tiết về các yêu cầu quyền tùy chọn)

Vấn đề đối với các yêu cầu quyền tùy chọn là bộ thực thi không có khả năng báo cho assembly rằng nó đã cấp những quyền nào Bạn có thể sử dụng một thao tác được-bảo-vệ và thất bại một cách êm xuôi khi lời gọi này dẫn đến ngoại lệ

System.Security.SecurityException Tuy nhiên, sẽ hiệu quả hơn khi xác định xem bạn có các quyền cần thiết hay không Sau đó, bạn có thể xây dưng logic vào trong mã lệnh để tránh

gọi phai các thành viên được-bảo-vệ mà sẽ gây ra stack walk và dựng nên các ngoại lệ bảo

mật Đoạn mã dưới đây trình bày cách sử dụng phương thức IsGranted để xác định xem

assembly hiện tại có quyền ghi vào thư mục C:\Data hay không Bạn có thể tạo một lời gọi

như thế mỗi khi bạn cần kiểm tra quyền, nhưng sẽ hiệu quả hơn nếu sử dụng môt giá trị luận

lý để thiết lập một cờ cấu hình cho biết có cho phép người dùng lưu file hay không

// Định nghĩa một biến luận lý cho biết assembly có quyền

// truy xuất ghi đối với thư mục C:\Data hay không.

bool canWrite = false;

// Tạo và cấu hình một đối tượng FileIOPermission mô tả quyền

// truy xuất ghi đối với thư mục C:\Data.

System.Security.Permissions.FileIOPermission fileIOPerm =

new System.Security.Permissions.FileIOPermission(

System.Security.Permissions.FileIOPermissionAccess.Write,

@"C:\Data");

// Kiểm tra assembly hiện tại có quyền đã được chỉ định hay không.

canWrite = System.Security.SecurityManager.IsGranted(fileIOPerm);

8. H n ch ai đó th a k các l p c a b n H n ch ai đó th a k các l p c a b n ạ ạ ế ế ừ ế ừ ế ớ ủ ạ ớ ủ ạ

và chép đè các thành viên l p

Bạn cần kiểm soát những ai có thể thừa kế các lớp của bạn thông qua sự thừa kế

(inheritance) và một lớp dẫn xuất có thể chép đè những thành viên nào.

Trang 4

Sử dụng các lệnh bảo mật khai báo (declarative security statement) để áp dụng

thành viên SecurityAction.InheritanceDemand vào phần khai báo của các lớp và các thành viên bạn cần bảo vệ.

Các modifier như sealed, public, private, và virtual cho phép bạn kiểm soát khả năng của các lớp khác khi các lớp này thừa kế lớp của bạn và chép đè các thành viên của nó Tuy nhiên, các modifier này không linh hoạt, không có khả năng chọn lọc khi giới hạn những mã lệnh nào có thể thừa kế một lớp hoặc chép đè các thành viên của nó Ví dụ, bạn muốn chỉ những

mã lệnh do công ty hay khoa của bạn viết thì mới có thể thừa kế các lớp nghiệp vụ quan trọng, hoặc chỉ những mã lệnh được nạp từ máy cục bộ thì mới có thể thừa kế các phương thức nào

đó Bằng cách áp dụng InheritanceDemand vào khai báo lớp hay thành viên, bạn có thể chỉ định các quyền (lúc thực thi) mà một lớp phải có thì mới có thể thừa kế lớp của bạn hoặc chép

đè các thành viên cụ thể nào đó Nhớ rằng, các quyền của một lớp là các quyền của assembly

mà lớp này được khai báo trong đó

Mặc dù bạn có thể yêu cầu bất kỳ quyền hay tập quyền nào trong InheritanceDemand, nhưng

thông thường là yêu cầu các quyền định danh (identity permission) Quyền định danh mô tả chứng cứ (evidence) do một assembly đưa cho bộ thực thi Nếu một assembly đưa ra các kiểu

chứng cứ nào đó lúc nạp, bộ thực thi sẽ tự động gán cho assembly này quyền định danh phù hợp Quyền định danh cho phép bạn sử dụng các lệnh bảo mật bắt buộc và khai báo

(imperative và declarative security statement) để trực tiếp ra các quyết định bảo mật (security

decision) căn cứ trên định danh mã (code identity) mà không cần trực tiếp đánh giá các đối

tượng chứng cứ Bảng 13-1 liệt kê kiểu quyền định danh được tạo cho mỗi kiểu chứng cứ (kiểu chứng cứ là thành viên của không gian tên System.Security.Policy, kiểu quyền định danh là thành viên của không gian tên System.Security.Permissions)

Bảng 13.1 Các lớp chứng cứ và các quyền định danh

StrongName StrongNameIdentityPermission

Bộ thực thi gán các quyền định danh cho một assembly dựa trên chứng cứ do

assembly này đưa ra Bạn không thể gán thêm quyền định danh cho một assembly thông qua việc cấu hình chính sách bảo mật.

Bạn phải sử dụng cú pháp bảo mật khai báo (declarative security syntax) để hiện thực một

InheritanceDemand, nên bạn phải sử dụng bản sao đặc tính (attribute counterpart) của lớp

quyền mà bạn muốn yêu cầu Tất cả các lớp quyền đều có một bản sao đặc tính để tạo các

Trang 5

PublisherIdentityPermission là PublisherIdentityPermissionAttribute, và bản sao đặc tính của StrongNameIdentityPermission là StrongNameIdentityPermissionAttribute—tất cả các quyền và các bản sao đặc tính củ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

Để kiểm soát những mã lệnh nào có thể thừa kế lớp của bạn, hãy áp dụng InheritanceDemand

khi khai báo lớp Đoạn mã dưới đây trình bày một lớp được bảo vệ bằng InheritanceDemand

Theo đó, chỉ những lớp bên trong các assembly được ký bởi publisher-certificate (nằm trong file pubcert.cer) thì mới có thể thừa kế lớp InheritanceDemandExample Nội dung của file

pubcert.cer được đọc lúc biên dịch, và các thông tin chứng thực cần thiết được gắn vào

assembly

[PublisherIdentityPermission(SecurityAction.InheritanceDemand,

CertFile = @"I:\CSharp\Chuong13\pubcert.cer")]

public class InheritanceDemandExample {

§

}

Để kiểm soát những mã lệnh nào có thể chép đè các thành viên nào đó, bạn hãy áp dụng

InheritanceDemand khi khai báo thành viên Xét đoạn mã dưới đây, chỉ những lớp được cấp tập quyền FullTrust thì mới có thể chép đè phương thức SomeProtectedMethod

[PermissionSet(SecurityAction.InheritanceDemand, Name="FullTrust")]

public void SomeProtectedMethod () {

§

}

Bạn cần kiểm tra chứng cứ mà bộ thực thi đã gán cho một assembly.

Thu lấy đối tượng System.Reflection.Assembly mô tả assembly mà bạn quan

tâm Lấy tập hợp System.Security.Policy.Evidence từ thuộc tính Evidence của đối tượng Assembly, rồi truy xuất các đối tượng chứng cứ bên trong bằng phương thức GetEnumerator, GetHostEnumerator, hay GetAssemblyEnumerator của lớp Evidence.

Lớp Evidence mô tả một tập hợp các đối tượng chứng cứ Thuộc tính chỉ-đọc Evidence của lớp Assembly trả về một đối tượng tập hợp Evidence chứa tất cả các đối tượng chứng cứ mà bộ thực thi đã gán cho assembly khi assembly này được nạp

Thật ra, lớp Evidence chứa hai tập hợp, mô tả hai kiểu chứng cứ khác nhau: chứng cứ host và

chứng cứ assembly Chứng cứ host bao gồm các đối tượng chứng cứ được gán cho assembly

bởi bộ thực thi hay mã lệnh đã nạp assembly (mã lệnh này là đáng tin cậy) Chứng cứ

assembly mô tả các đối tượng chứng cứ tùy biến được nhúng vào assembly lúc tạo dựng Lớp

Evidence hiện thực ba phương thức sau đây để liệt kê các đối tượng chứng cứ bên trong:

• GetEnumerator

Trang 6

• GetHostEnumerator

• GetAssemblyEnumerator

Phương thức GetEnumerator trả về một System.Collections.IEnumerator dùng để liệt kê tất

cả các đối tượng chứng cứ bên trong tập hợp Evidence Phương thức GetHostEnumerator và

GetAssemblyEnumerator trả về một thể hiện IEnumerator liệt kê chỉ các đối tượng chứng cứ từ tập hợp tương ứng

Ví dụ dưới đây trình bày cách hiển thị chứng cứ host và chứng cứ assembly của một

assembly Chú ý rằng, tất cả các lớp chứng cứ chuẩn đều chép đè phương thức

Object.ToString để biểu diễn trạng thái của đối tượng chứng cứ Mặc dù có liên quan nhưng không phải lúc nào ví dụ này cũng hiển thị chứng cứ mà một assembly sẽ có khi được nạp từ

bên trong chương trình của bạn Runtime host (như Microsoft ASP.NET hay Microsoft

Internet Explorer runtime host) có thể tự ý gán thêm chứng cứ host khi nó nạp một assembly.

using System;

using System.Reflection;

using System.Collections;

using System.Security.Policy;

public class ViewEvidenceExample {

public static void Main(string[] args) {

// Nạp assembly đã được chỉ định.

Assembly a = Assembly.LoadFrom(args[0]);

// Thu lấy tập hợp Evidence từ assembly đã được nạp.

Evidence e = a.Evidence;

// Hiển thị chứng cứ host.

IEnumerator x = e.GetHostEnumerator();

Console.WriteLine("HOST EVIDENCE COLLECTION:");

while(x.MoveNext()) {

Console.WriteLine(x.Current.ToString());

}

// Hiển thị chứng cứ assembly.

x = e.GetAssemblyEnumerator();

Console.WriteLine("ASSEMBLY EVIDENCE COLLECTION:");

while(x.MoveNext()) {

Trang 7

}

}

}

Tất cả các lớp chứng cứ chuẩn do NET Framework cấp đều bất biến, bạn không thể thay đổi

các giá trị của chúng sau khi bộ thực thi đã tạo ra rồi gán chúng cho assembly Ngoài ra, bạn không thể thêm hay loại bỏ các item trong lúc đang liệt kê một tập hợp bằng IEnumerator, nếu không, phương thức MoveNext sẽ ném ngoại lệ System.InvalidOperationException

Bạn cần xử lý chứng cứ khi nạp một assembly để tác động đến các quyền mà bộ

thực thi cấp cho assembly.

Tạo các đối tượng chứng cứ mà bạn muốn gán cho assembly, sau đó thêm chúng

vào một thể hiện của lớp System.Security.Policy.Evidence, rồi truyền tập hợp Evidence cho phương thức dùng để nạp assembly.

Chứng cứ (được chiếm hữu bởi một assembly) định nghĩa định danh (identity) của assembly

và xác định bộ thực thi cấp các quyền nào cho assembly Bộ nạp assembly (Assembly Loader)

chịu trách nhiệm chính trong việc xác định gán chứng cứ gì cho một assembly, nhưng một

host đáng tin cậy (như ASP.NET hay Internet Explorer runtime host) cũng có thể gán chứng

cứ cho một assembly Mã lệnh của bạn có thể gán chứng cứ khi nạp một assembly nếu mã lệnh này có phần tử ControlEvidence của SecurityPermission

Nếu bạn nạp một assembly vào một miền ứng dụng hai lần nhưng gán chứng cứ

khác vào assembly này mỗi lần như thế, bộ thực thi sẽ ném ngoại lệ System.IO.FileLoadException.

Có nhiều phương thức thực hiện việc gán chứng cứ khi nạp một assembly Một đặc điểm mà tất cả các phương thức này thường có là nhận một tập hợp Evidence làm đối số—lớp Evidence

là một bộ chứa cho các đối tượng chứng cứ Bạn phải đặt từng đối tượng chứng cứ mà bạn muốn gán cho assembly vào một tập hợp Evidence và truyền nó cho phương thức nạp assembly Nếu bạn gán chứng cứ mới xung đột với chứng cứ được gán bởi bộ nạp assembly, chứng cứ mới sẽ thay thế chứng cứ cũ Bảng 13-2 liệt kê các lớp và các phương thức của chúng trực tiếp hay gián tiếp nạp một assembly Mỗi phương thức cung cấp một hay nhiều phiên bản nạp chồng chấp nhận một tập hợp Evidence

Bảng 13.2 Các lớp và các phương thức của chúng cho phép bạn gán chứng cứ cho một assembly

Lớp System.Activator Các phương thức này ảnh hưởng đến miền ứng dụng

hiện hành

CreateInstance

CreateInstanceFrom

Tạo một kiểu trong miền ứng dụng hiện hành từ assembly được chỉ định

Trang 8

Lớp System.AppDomain

Các phương thức này ảnh hưởng đến miền ứng dụng được mô tả bởi đối tượng AppDomain (phương thức được gọi trên đó)

CreateInstance

CreateInstanceAndUnwrap

CreateInstanceFrom

CreateInstanceFromAndUnwrap

Tạo một kiểu từ assembly được chỉ định

DefineDynamicAssembly

Tạo một đối tượng System.Reflection.Emit AssemblyBuilder, bạn có thể sử dụng nó để tạo động một assembly trong bộ nhớ

ExecuteAssembly Nạp và thực thi một assembly có điểm nhập đã được

định nghĩa (phương thức Main)

Load Nạp assembly được chỉ định

Lớp System.Reflection.Assembly Các phương thức này ảnh hưởng đến miền ứng dụng

hiện hành

Load

LoadFile

LoadFrom

LoadWithPartialName

Nạp assembly được chỉ định

Đoạn mã dưới đây trình bày cách sử dụng phương thức Assembly.Load để nạp một assembly vào miền ứng dụng hiện hành Trước khi gọi Load, đoạn mã này tạo một tập hợp Evidence và

sử dụng phương thức AddHost của nó để thêm các đối tượng chứng cứ Site và Zone (các thành viên của không gian tên System.Security.Policy)

// Tạo các đối tượng chứng cứ Site và Zone mới.

System.Security.Policy.Site siteEvidence = new

System.Security.Policy.Site("www.microsoft.com");

System.Security.Policy.Zone zoneEvidence = new

System.Security.Policy.Zone(System.Security.SecurityZone.Trusted);

// Tạo một tập hợp Evidence mới.

System.Security.Policy.Evidence evidence =

new System.Security.Policy.Evidence();

// Thêm các đối tượng chứng cứ Site và Zone vào tập hợp Evidence

// bằng phương thức AddHost.

Trang 9

// Nạp assembly có tên là "SomeAssembly" và gán các đối tượng Site và

// Zone cho nó Các đối tượng này sẽ chép đè các đối tượng Site và Zone

// do bộ nạp assembly gán.

System.Reflection.Assembly assembly =

System.Reflection.Assembly.Load("SomeAssembly", evidence);

11. X lý b o m t b th c thi b ng ch ng c c a mi n ng d ng X lý b o m t b th c thi b ng ch ng c c a mi n ng d ng ử ử ả ậ ộ ự ả ậ ộ ự ằ ằ ứ ứ ứ ủ ứ ủ ề ứ ề ứ ụ ụ

Bạn cần buộc một giới hạn trên (upper limit) lên các quyền đang có hiệu lực với

tất cả các assembly được nạp vào một miền ứng dụng cụ thể.

Cấu hình chính sách bảo mật để cấp các quyền phù hợp dựa trên chứng cứ mà

bạn dự định gán cho miền ứng dụng Khi tạo miền ứng dụng bằng phương thức tĩnh CreateDomain của lớp System.AppDomain, bạn hãy cung cấp một tập hợp System.Security.Policy.Evidence chứa các đối tượng chứng cứ của miền ứng dụng Sau đó, nạp các assembly mà bạn muốn giới hạn các quyền của chúng bên trong miền ứng dụng này.

Đúng như bộ thực thi gán quyền cho assembly dựa trên chứng cứ mà assembly này đưa ra lúc nạp, bộ thực thi cũng gán quyền cho các miền ứng dụng dựa trên chứng cứ của chúng Bộ thực thi không gán chứng cứ cho các miền ứng dụng theo cách như nó gán cho các assembly

vì không có gì để chứng cứ đó tựa vào Thay vào đó, mã lệnh tạo miền ứng dụng phải gán chứng cứ khi cần

Bộ thực thi chỉ sử dụng các mức chính sách công ty (enterprise), máy (machine),

và người dùng (user) để tính các quyền của một miền ứng dụng; các chính sách

bảo mật của các miền ứng dụng hiện có không giữ vai trò gì cả Mục 13.12 sẽ thảo luận chính sách bảo mật miền ứng dụng.

Các miền ứng dụng không có chứng cứ là trong suốt đối với các cơ chế bảo mật truy xuất mã lệnh của bộ thực thi Các miền ứng dụng được gán chứng cứ có một grant-set dựa trên chính

sách bảo mật và đóng một vai trò quan trọng trong việc phân giải các yêu cầu bảo mật CAS

Khi quá trình thực thi ứng dụng xuyên qua một biên miền ứng dụng, bộ thực thi ghi lại việc chuyển tiếp trên call stack Khi một yêu cầu bảo mật gây nên một stack walk, bản ghi chuyển tiếp miền ứng dụng được xử lý giống như các bản ghi stack khác—bộ thực thi đánh giá grant-set kết giao với bản ghi stack để bảo đảm nó chứa các quyền được yêu cầu Điều này nghĩa là các quyền của một miền ứng dụng ảnh hưởng đến tất cả mã lệnh được nạp vào miền ứng dụng Thưc tế, miền ứng dụng thiết lập một giới hạn trên lên các khả năng của tất cả mã lệnh được nạp vào nó

Một ví dụ quan trọng trong sử dụng chứng cứ miền ứng dụng là Microsoft Internet Explorer

Internet Explorer tạo một miền ứng dụng cho mỗi site mà nó download các điều kiểm

được-quản-lý từ đó Tất cả các điều kiểm được download từ một site cho trước—cũng như các

assembly mà chúng nạp—chạy trong cùng miền ứng dụng Khi Internet Explorer tạo miền

Trang 10

ứng dụng cho một site, nó gán chứng cứ System.Security.Policy.Site cho miều ứng dụng này Điều này bảo đảm rằng, nếu các điều kiểm được download nạp một assembly (ngay cả từ đĩa cục bộ), các hành động của assembly này bị ràng buộc bởi các quyền được cấp cho miền ứng dụng dựa trên chứng cứ Site và chính sách bảo mật

Trừ khi bạn gán chứng cứ cho miền ứng dụng một cách tường minh khi tạo nó,

miền ứng dụng này không ảnh hưởng gì đến các yêu cầu bảo mật (security

demand).

Để gán chứng cứ cho một miền ứng dụng, bạn hãy tạo một tập hợp Evidence và thêm các đối tượng chứng cứ cần thiết vào đó bằng phương thức Evidence.AddHost Khi tạo miền ứng dụng mới, bạn truyền tập hợp Evidence cho một trong các phiên bản nạp chồng của phương thức tĩnh CreateDomain Quá trinh phân giai chinh sách thương ky cua bô thưc thi se xác đinh grant-set của miền ứng dụng

Ứng dụng dưới đây trình bày cách gán chứng cứ cho một miền ứng dụng Trong đó, ứng dụng nạp mã lệnh từ một publisher cụ thể vào một miền ứng dụng publisher cụ thê Bằng cách gán cho miều ứng dụng chứng cứ System.Security.Policy.Publisher mô tả publisher của phần mềm, ví dụ này hạn chế các khả năng của mã lệnh được nạp vào miền ứng dụng Sử dụng chính sách bảo mật, bạn có thể gán mã lệnh của publisher một tập quyền cực đại tương xứng với mức tin cậy bạn đặt vào publisher

using System;

using System.Security.Policy;

using System.Security.Cryptography.X509Certificates;

public class AppDomainEvidenceExample {

public static void Main() {

// Tạo một miền ứng dụng mới cho mỗi publisher mà ứng dụng này

// sẽ nạp mã lệnh của nó Truyền cho phương thức CreateAppDomain

// tên công ty, và tên của file chứa chứng chỉ X.509v3

// của công ty này.

AppDomain appDom1 = CreateAppDomain("Litware", "litware.cer");

AppDomain appDom2 = CreateAppDomain("Fabrikam", "fabrikam.cer");

// Nạp mã lệnh từ các publisher vào miền ứng dụng phù hợp

// để thực thi.

§

}

Ngày đăng: 08/07/2014, 17:20

HÌNH ẢNH LIÊN QUAN

Bảng 13.1 Các lớp chứng cứ và các quyền định danh - Các giải pháp lập trình CSharp- P64 ppsx
Bảng 13.1 Các lớp chứng cứ và các quyền định danh (Trang 4)
Bảng 13.2 Các lớp và các phương thức của chúng cho phép bạn gán chứng cứ cho một assembly - Các giải pháp lập trình CSharp- P64 ppsx
Bảng 13.2 Các lớp và các phương thức của chúng cho phép bạn gán chứng cứ cho một assembly (Trang 7)

TỪ KHÓA LIÊN QUAN

w