代码访问安全性

访问安全性
1.代码访问安全性的好处
2.在代码中指定安全性权限的方法
3.安全性策略中的规则
4.堆栈遍历的简介
使用 .NET Framework 配置工具配置 安全性
1.使用 Microsoft .NET Framework 2.0 配置工具配置代码访问安全性
2.使用 caspol.exe 来查看并修改代码组的安全性策略
使用证据类型确定程序集权限
Evidence 类的成员:
Count:属性提供证据集中证据对象数量的计数值。
AddAssembly:方法向证据集中添加程序集证据。
AddHost:方法向证据集中添加主机证据。
Clear:方法从证据集中移除所有证据。
CopyTo:方法将证据复制到数组。
GetAssemblyEnumerator:方法返回访问程序集证据的枚举数。
GetEnumerator:方法返回访问所有证据的枚举数。
GetHostEnumerator:方法返回访问主机证据的枚举数。
RemoveType:方法从证据集中移除特定类型的证据。
PermissionRequestEvidence类的成员:
DeniedPermissions:属性包含代码显式请求不要授予的权限。
OptionalPermissions:属性包含(如果授予)代码可以使用的(但不是必需的)权限。
RequestedPermissions:属性包括运行代码所需的最小权限集。
Copy:方法创建权限集的副本。
IEvidenceFactory 接口
管理安全性策略
1安全性策略
1>.NET Framework安全性策略模型
a.企业
b.计算机
c.用户
d.应用程序域
2>安全性策略的组件
a.权限集
b.代码组
c.成员条件类
2.使用 SecurityManager 类来配置安全性策略
SecurityManager 类的常用方法:
IsGranted:确定是否将权限授予调用方。
LoadPolicyLevelFromFile:从文件加载 PolicyLevel。PolicyLevel 是创建应用程序域策略所需的的完整信息集合。
LoadPolicyLevelFromString:从字符串(而非文件)进行加载。
PolicyHierarchy:提供枚举数以访问安全性策略层次结构(从企业到应用程序域)的不同级别。
ResolvePolicy:基于在方法中传递的证据来确定要授予的权限。
ResolvePolicyGroups:获取与指定证据匹配的代码组集合。
SavePolicy:保存修改过的安全性策略状态。
SavePolicyLevel:保存LoadPolicyLevelFromFile 所加载的修改的安全性策略级别。
3.使用策略类来管理安全性策略
SecurityManager 类通常与  PolicyLevel 类和 PolicyStatement 类结合使用,以管理安全性策略。
4.使用代码组类来配置代码组
CodeGroup类的常见成员:
AttributeStream:该属性获取代码组的策略语句属性的字符串表现形式。
Children:该属性获取或设置代码组的子代码组的排序列表。
Description:该属性获取或设置代码组的描述。
MembershipCondition:该属性获取或设置代码组的成员条件。
Name:该属性获取或设置代码组的名称。
PermissionSetName:该属性获取代码组的命名权限集的名称。
PolicyStatement:该属性获取或设置与代码组相关联的策略语句。
AddChild:该方法将子代码组添加到当前代码组。
FromXml:该方法从 XML 编码重新构造安全性对象。
RemoveChild:该方法移除指定的子代码组。
ToXml:该方法创建安全性对象的 XML 编码。
UnionCodeGroup类
AddConnectAcces:该方法将指定的连接访问权添加到当前代码组。
GetConnectAccessRules:该方法获取当前代码组连接访问权信息。
ResetConnectAccess:该方法移除当前代码组的所有连接访问权信息。
FirstMatchCodeGroup类
FileCodeGroup 类
NetCodeGroup类
5.使用条件类型来管理代码组成员
管理代码组的成员条件的类:
1>AllMembershipCondition
2>ApplicationDirectory 和ApplicationDirectoryMembershipCondition
3>GacInstalled 和 GacMembershipCondition
4>Hash 和HashMembershipCondition
5>Publisher和PublisherMembershipCondition
6>Site 和 SiteMembershipCondition
7>StrongName和StrongNameMembershipCondition
8>Url 和 UrlMembershipCondition
9>Zone 和 ZoneMembershipCondition
6.使用安全性策略接口以创建自定义安全性策略
IApplicationTrustManager 接口
IMembershipCondition 接口
管理权限
1.权限
1>权限类型
a.代码访问权限
b.标识权限
c.基于角色的安全性权限 
2>权限使用方法
a.请求
b.要求
c.授予
2.使用 CodeAccessPermission 类实现权限类型
IPermission的常用成员:
Copy:创建并返回当前权限的相同副本。
Demand:如果未满足安全性要求,则会在运行时引发SecurityException异常。
Intersect:创建并返回一个权限,该权限是当前权限和指定权限的交集。这两个权限必须为同一类型。
IsSubsetOf:确定当前权限是否是指定权限的子集。
Union:创建一个权限,该权限是当前权限和指定权限的并集。
Assert:阻止检查调用堆栈上部的权限。
Copy:通过派生类实现时,创建并返回当前权限对象的相同副本。
Demand:在运行时,引起堆栈遍历。如果未给调用堆栈中处于较高位置的所有调用方授予该权限,则将引发 SecurityException 异常。
Deny:阻止访问指定资源(包括调用堆栈中处于较高位置的调用方)。
FromXml:从 XML 中重新构造权限对象。
Intersect:创建并返回一个权限,该权限是当前权限和指定权限的交集。
IsSubsetOf:确定当前权限是否是指定权限的子集。
PermitOnly:确保即使已授予此代码访问其他资源的权限,也只可以访问权限对象指定的资源。
RevertAll:移除所有 Assert、Deny 或 PermitOnly 重写。
RevertAssert:移除所有先前的 Assert 重写。
RevertDeny:移除所有先前的 Deny 重写。
RevertPermitOnly:移除所有先前的 PermitOnly 重写。
ToXml:将权限对象序列化为 XML。
Union:创建一个权限,该权限是当前权限和指定权限的并集。
3.配置代码访问安全性权限
安全性权限类
(1)SecurityPermission 类
SecurityPermissionFlag 的枚举成员:
AllFlags:指示授予此表中描述的所有代码权限。
Assertion:指示要申请断言调用(在其中检查权限)的权限不能提升到调用堆栈中的更高位置。
BindingRedirects:指示在应用程序配置文件中执行显式绑定重定向的权限。其中包括已统一在 .NET Framework中的程序集的重定向,以及.NET Framework 外所找到的其他程序集的重定向。
ControlAppDomain:指示创建和管理 AppDomain 的权限
ControlDomainPolicy:指示指定域策略的权限。
ControlEvidence:指示提供证据的权限,包括更改 CLR 所提供的证据的能力。注意 ControlEvidence 只供高度信任的代码使用。
ControlPolicy:指示查看和修改安全性策略的权限。注意 ControlPolicy 只供高度信任的代码使用。
ControlPrincipal:指示操作用户或主要对象的权限。
ControlThread:指示在线程上使用某些高级操作的权限。
Execution:指示使代码运行的权限。如果没有此权限,就不能执行托管代码。当动态使用堆栈修饰符(例如 Deny、Assert 和 PermitOnly)时,此标记无效。
Infrastructure:指示将代码插入CLR 基础结构的权限,例如添加远程处理上下文接收器(Remoting Context Sinks)、Envoy 接收器(Envoy Sinks )和动态接收器(Dynamic Sinks)。
NoFlags 指示无安全性访问。
RemotingConfiguration:指示配置远程处理类型和信道的权限。
SerializationFormatter:指示提供序列化服务的权限。SerializationFormatter 由序列化格式化程序使用。
SkipVerification:指示跳过此程序集内代码验证的权限。如果授予此权限,则可以运行无法验证的代码。注意 SkipVerification 只供高度信任的代码使用。当动态使用堆栈修饰符(例如Deny、Assert 和 PermitOnly )时,此标志无效。
UnmanagedCode:指示调用非托管代码的权限。注意 UnmanagedCode 只供高度信任的代码使用。
(2) PrinicipalPermission 类
PrinicipalPermission 类的常用方法 :
Copy:创建并返回当前权限的相同副本。
Demand:确定在运行时当前主体是否与指定的主体匹配。与其他权限类不同,该类的 Demand 方法不执行堆栈遍历,因为所有级别上的用户标识都相同。
FromXml:从 XML 重新构造权限。
GetHashCode:为适合在哈希算法和数据结构(例如哈希表)中使用的 PrincipalPermission 对象获取哈希代码。
Intersect:创建并返回一个权限,该权限是当前权限和指定权限的交集。
IsSubsetOf:确定当前权限是否是指定权限的子集。
IsUnrestricted:返回一个值,该值指示当前权限是否是不受限制的。
ToString:已重载。它创建并返回一个表示当前权限的字符串。
ToXml:创建权限的 XML 编码。
Union:创建一个权限,该权限是当前权限和指定权限的并集。
(3) FileIOPermission类
FileIOPermission 类的常用成员:
AllFiles:该属性获取或设置对所有文件的允许访问权限。
AllLocalFiles:该属性获取或设置对所有本地文件的允许访问权限。
AddPathList:该方法将对指定文件和目录的访问权限添加到权限的现有状态。
GetPathList:该方法获取具有指定 FileIOPermissionAccess 的所有文件和目录。
SetPathList:该方法设置对指定文件和目录的指定访问权限,同时替换权限的现有状态。
(4) SmtpPermission 类
SmtpPermission 类的最常用成员:
Access:通过使用下列 SmtpAccess 枚举值之一,该属性获取对权限所控制的SMTP 服务器的访问级别。它有三个成员:
Connect:允许对标准 SMTP 端口 25 的访问权限。
ConnectToUnrestrictedPort 允许对任何端口的访问权限。
None 拒绝对 SMTP 主机的访问权限。
AddPermission:该方法将指定访问级别值添加到权限。
(5) SmtpPermissionAttribute 类
SmtpPermissionAttribute 类的常用的成员:
Access:该属性获取对 SMTP 服务器的访问级别。
Action:通过使用下一个表所显示的SecurityAction 枚举值之一,该属性获取或设置安全性操作。
TypeId:该属性获取 SmtpPermissionAttribute 的唯一标识符。
Unrestricted:该属性获取或设置了一个值,该值指示是否对该属性所保护的资源声明了完全(无限制)权限。
SecurityAction 枚举值:
Assert:指示即使堆栈中的高级调用方未被授予访问当前权限对象所标识的资源的权限,调用代码仍可以访问该资源。
Demand:指示所要求的调用堆栈中的所有高级调用方都已被授予该权限。
Deny:指示即使调用方已被授予访问当前权限对象所指定的资源的权限,调用方访问该资源的权限仍被拒绝。
InheritanceDemand:指示要求继承此类或重写某一方法的派生类已被授予指定的权限。
LinkDemand:指示要求直接调用方已被授予指定的权限。
Windows 环境权限类证据权限类
PermitOnly:指示即使已授予代码访问其他资源的权限,也只可以访问权限对象所指定的资源。
RequestMinimum:指示请求使代码运行所需的最小权限。此操作只能在程序集范围内使用。
RequestOptional:指示请求可选的附加权限。此请求隐式拒绝未明确请求的所有权限。此操作只能在程序集范围内使用。
RequestRefuse:指示请求不将可能被误用的权限授予调用代码。此操作只能在程序集范围内使用。
4.使用权限集类管理权限组 
EnvironmentPermission:EnvironmentPermission 类控制对系统和用户环境变量的访问。EnvironmentPermission 类有两个特殊方法:AddPathList方法(添加指定的环境变量的访问权限)和 SetPathList 方法(修改指定的环境变量的访问级别)。
ServiceControllerPermission:ServiceControllerPermission 类控制应用程序能否使用允许你管理 Windows 服务的服务控制器类。ServiceControllerPermission 类的一个特殊成员是 PermissionEntries 属性,它获取 ServiceControllerPermissionEntry 对象的集合。这些对象的每一个成员都定义一个 Windows 服务及其所在的计算机。
RegistryPermission:RegistryPermission 类控制对注册表的访问。可以通过使用 Flags 属性指定访问级别和控制级别,Flags 属性使用下面两个枚举。
RegistryPermissionAccess:
AllAccess:提供对注册表变量的不受限制的访问权限。
Create:提供创建新的注册表变量的能力。
NoAccess:限制对注册表变量的访问权限。
Read:可以读注册表变量。
Write:可以修改现有的注册表变量。
AccessControlActions:
Change:提供只写访问权限。
None:限制访问权限。
View:提供只读访问权限。
AddPathList 和 SetPathList 方法允许指定特殊注册表变量上的特殊访问级别,而 GetPathList 方法则返回所有具有指定访问级别的注册表变量。
IsolatedStorageFilePermission:IsolatedStorageFilePermission 类控制对私有虚拟文件系统的访问。该类有两个属性:UsageAllowed和 UserQuota。前者获取或设置所允许的独立存储区(应用程序、域或程序集)的类型,后者获取或设置每位用户的总存储区在总容量中的配额。
UIPermissionL:UIPermission 类控制与用户界面和剪贴板相关的权限。UIPermission 包含两个属性 Clipboard 和 AllWindows:
Clipboard 通过使用来自 UIPermissionClipboard 枚举的值获取或设置剪贴板访问权限。
AllClipboard:指定可以不受限制地使用剪贴板。
NoClipboard:指定剪贴板不可用。
OwnClipboard:指定在某些限制下可使用剪贴板。
Windows 通过 UIPermissionWindow 枚举的值获取或设置窗口访问权限。
AllWindows 指定用户可以不受限制地使用所有的 Windows 和用户输入事件。
NoWindows:指定用户不能使用任何 Windows 或用户界面事件。
SafeSubWindows:指定用户只能使用 SafeSubWindows 进行绘制。SafeSubWindows:的一个例子就是 MessageBox。
SafeTopLevelWindows:指定用户只可使用 SafeTopLevelWindows 和 SafeSubWindows。
证据权限类
GacIdentityPermission:GacIdentityPermission 类根据程序集是否存在于全局程序集缓存中来定义标识权限。根据 GacInstalled 证据授予此权限。
PublisherIdentityPermission PublisherIdentityPermission 类根据软件发行者的数字证书来定义标识权限。PublisherIdentityPermission 的 Certificate 属性获取或设置Authenticode X.509v3 证书。
UrlIdentityPermission:UrlIdentityPermission 类为生代码的URL 定义标识权限。对于完整的 URL ,它包括协议和文件,其中协议可为HTTP(Hypertext Transfer Protocol,超文本传输协议)、HTTPS(Hypertext Transfer Protocol:Secure,安全超文本传输)和FTP(文件传输协议)。URL 可以精确匹配或在末尾用通配符匹配,例如,http://www.contoso.com/*。URL 还可以包含通配符(“*”)前缀,例如,http://*.contoso.com/default.htm。UrlIdentityPermission 类的 Url 属性获取或设置表示 Internet 代码标识的 URL。
StrongNameIdentityPermission:StrongNameIdentityPermission 类定义强名称的标识权限。强名称用于为程序集提供唯一标识符。每个强名称都包含加密公钥、名称和版本。通过使用 StrongNameIdentityPermission 类,可以给程序集的特定版本和名称授予权限。
下面是StrongNameIdentityPermission 类的属性。
Name:获取或设置强名称标识的简单名称部分。
PublicKey:获取或设置与标识关联的公钥。
Version:获取或设置标识的版本号。
ReflectionPermission:ReflectionPermission 类通过使用反射控制对元数据的访问。它有一个 Flags 属性,该属性获取或设置所允许的反射的类型。
SiteIdentityPermission:SiteIdentityPermission 类用于指示调用方源自某指定的 Web 站点。通过使用 HTTP、HTTPS 和 FTP 协议只为源自 URL 的程序集定义站点标识。其 Site 属性获取或设置权限对应的当前站点。
ZoneIdentityPermission:ZoneIdentityPermission 类定义某个特定区域的标识权限。SecurityZone 属性获取或设置权限的区域,并从 SecurityZone 枚举中获取一个值。这些区域可为: Internet 、Intranet、MyComputer、NoZone 、Trusted和 Untrusted。这些区域与在 Internet Explorer 安全设置中所找到的区域相对应,在Internet Explorer中你可以根据代码是源自Internet、内联网或本地计算机来设置不同的信任级别。
使用权限集类管理权限组
PermissionSet 类的最常用的成员:
AddPermission:向 PermissionSet 添加指定权限。
Assert:检查程序集上的权限,阻止更高级别上的堆栈遍历。
ContainsNonCodeAccessPermissions:获取一个值,该值指示 PermissionSet 是否包含不是从 CodeAccessPermission 派生的权限。
ConvertPermissionSet:将编码的 PermissionSet 从一种 XML 编码格式转换为另一种 XML 编码格式。
Copy:创建 PermissionSet 的副本。
CopyTo:将该集合的权限对象复制到 Array 中的指示位置。
Demand:检查权限,如果未授予任何权限,则在运行时引发 SecurityException。
Deny:导致任何请求当前 PermissionSet 中的某个权限的 Demand 失败。
FromXml:从 XML 中重新构造权限集。
GetEnumerator: 返回集合的权限的枚举数。
GetHashCode:获取PermissionSet 对象的哈希代码。
GetPermission:获取指定的类型的权限对象(如果它存在于集合中)。
Intersect:创建并返回一个权限集,该权限集是当前 PermissionSet 和指定 PermissionSet 的交集。
IsEmpty 获取一个值,该值指示 PermissionSet 是否为空。
IsSubsetOf:确定当前 PermissionSet 是否是指定 PermissionSet 的子集。
IsUnrestricted: 确定 PermissionSet 是否不受限制。
PermitOnly:即使已授予代码访问其他资源的权限,也只可以访问此集合中的权限所指定的资源。
RemovePermission:从集合中移除某种类型的权限。
RevertAssert:移除当前框架所有的 Assert。
SetPermission:将权限设置到 PermissionSet,同时替换同一类型的所有现有权限。
ToXmlL: 将 PermissionSet 序列化为 XML。
Union:创建一个 PermissionSet,它是当前 PermissionSet 和指定的 PermissionSet 的并集。
管理访问控制
1.访问控制基类的角色 
AuthorizationRule类
AuthorizationRuleCollection类
AccessRule类
AuditRule类
2.使用访问控制列表类管理用户对资源的访问 
GenericAce 类
AceType 该属性获取当前ACE类型。
BinaryLength 该属性获取当前 GenericAce 对象二进制表示形式的长度(以字节为单位)。
Copy 该方法创建此ACE 的深度副本。
CreateFromBinaryForm 该方法从指定的二进制数据创建一个 GenericAce 对象。
GetBinaryForm 该方法将 GenericAce 对象的内容封送到指定的字节数组中,其位置从指定的偏移量开始。
CommonAce 类 
AceQualifier 获取一个值,该值用 AceQualifier 枚举决定访问类型。在下列 AceQualifier 枚举中:
AccessAllowed:允许访问。
AccessDenied:拒绝访问。
SystemAlarm:引起系统警告。
SystemAudit:引起系统审核。
OpaqueLength 获取与对象关联的不透明回调数据的长度。
GetOpaque 返回与对象关联的不透明回调数据。
MaxOpaqueLength 获取回调 ACL 的不透明数据 BLOB 的最大允许长度。
SetOpaque 设置与对象关联的不透明回调数据。
GenericAcl 类 
BinaryLength 该属性获取当前 GenericAcl 对象的二进制表示形式的长度(以字节为单位)。
Count 该属性获取当前 GenericAcl 对象中 ACE 的数目。
Item 该属性获取或设置指定索引处的 GenericAce。
Revision 该属性获取 GenericAcl 修订级别。
CopyTo 该方法将当前 GenericAcl 的每个 GenericAce 复制到指定数组。
GetBinaryForm 该方法将 GenericAcl 对象的内容封送到指定的字节数组,其位置从指定的偏移量开始。
GetEnumerator 该方法返回 AceEnumerator 类的新实例。
SystemAcl 类和DiscretionaryAcl 类
AddAccess 已重载。将具有特定设置的 ACE 添加到当前 DiscretionaryAcl 对象。
Purge 移除被此对象包含且与指定 SecurityIdentifier 对象关联的所有 ACE。
RemoveAccessSpecific 从当前 DiscretionaryAcl 对象移除指定的 ACE。
RemoveInheritedAces 从此对象移除所有继承的 ACE。
SetAccess 为指定的 SecurityIdentifier 对象设置指定的访问控制。
AddAudit 将一个审核规则添加到当前 SystemAcl 对象。
RemoveAudit 从当前 SystemAcl 对象移除指定的审核规则。
SetAudit 为指定的 SecurityIdentifier 对象设置指定的审核规则。
3.使用资源安全类保护资源
 ObjectSecurity 类的常用成员:
AccessRightType 该属性获取与 ObjectSecurity对象关联的可保护对象的 Type。
AccessRuleType 该属性获取与 ObjectSecurity对象的访问规则关联的可保护对象的 Type。
AccessRuleFactory 该方法用指定的值初始化 AccessRule 类的新实例。
AuditRuleFactory 该方法用指定的值初始化 AuditRule 类的新实例。
ModifyAccessRule 该方法将指定修改应用于与此 ObjectSecurity 对象关联的 DACL。
ModifyAuditRule 该方法将指定修改应用于与此 ObjectSecurity 对象关联的 SACL。
PurgeAccessRules 该方法移除与指定的 IdentityReference 关联的所有访问规则。
PurgeAuditRules 该方法移除与指定的 IdentityReference 关联的所有审核规则。
SetAccessRuleProtection 该方法设置或移除与此 ObjectSecurity 对象关联的访问规则的保护。
SetAuditRuleProtection 该方法设置或移除与此 ObjectSecurity 对象关联的审核规则的保护。
RegistrySecurity 类的成员:
AccessRightType 表示 RegistryRights 枚举的 Type 对象,该枚举可取以下值:
1.ChangePermissions2.CreateLink3.CreateSubKey4.Delete5.EnumerateSubKeys6.ExecuteKey7.FullControl8.Notify9.QueryValues10.ReadKey11.ReadPermissions12.SetValue13.TakeOwnership14.WriteKey
AccessRuleType 通过使用 AccessControlType 枚举两个成员(Access 和 Denied)之一来指定其值。
AuditRuleType 表示 RegistryAuditRule 类的 Type 对象。
MutexSecurity 类的重载属性:
AccessRightType 表示 MutexRights 枚举的 Type 对象,该枚举可取下列值:
1.ChangePermissions2.Delete3.FullControl4.Modify5.ReadPermissions6.Synchronize7.TakeOwnership
AccessRuleType 通过使用 AccessControlType 枚举两个成员(Access 和 Denied)之一来指定其值。
AuditRuleType 表示 MutexAuditRule 类的 Type 对象。
SemaphoreSecurity 从 CommonObjectSecurity 继承其成员,重载了以下三个属性:
AccessRightType 表示 SemaphoreSecurity 枚举的 Type 对象,可具有下列值:
1.ChangePermissions2.Delete3.FullControl4.Modify5.ReadPermissions6.Synchronize7.TakeOwnership
AccessRuleType 通过使用 AccessControlType 枚举两个成员(Access 和 Denied)之一来指定其值。
AuditRuleType 表示 SemaphoreAuditRule 类的 Type 对象。
IIdentity 接口和IPrincipal 接口的角色
IIdentity接口
为所有的标识类型定义了基本功能
只有三个属性且无任何方法 :
1.AuthenticationType属性
2.IsAuthenticated属性
3.Name属性
IPrincipal接口
确保主体类型提供了标识及其角色的基本功能
两个属性:
1.Identity属性
2.IsInRole属性
使用GenericIdentity类管理用户标识
GenericIdentity 类
1.用于管理泛型用户,例如匿名或默认标识
2.实现 IIdentity 接口,且不提供任何附加的成员
GenericPrincipal类
1.用来管理泛型用户及其关联的角色
2.实现 IPrincipal 接口,且不提供任何附加的成员
使用Windows标识类确定Windows用户身份
WindowsIdentity 类
WindowsPrincipal 类
使用IdentityReference类收集用户标识信息
IdentityReference
IdentityReferenceCollection
SecurityIdentifier 
使用WindowsImpersonationContext类临时模拟用户
WindowsImpersonationContext 类
1.在模拟操作之前,该类用于表示Windows 用户
2.最常用的成员为Undo方法,它帮助将用户上下文恢复为此对象所表示的Windows用户

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值