06 2012 档案
摘要:
1).NET 体系结构
2)托管PE文件
3)元数据与IL简介
4)程序集基本概念
5)说说emit(上)基本操作
6)说说emit(中)ILGenerator
7)应用程序域基础
8)CLR寄宿(上) MSCOREE.DLL
9)CLR寄宿(中) 托管exe文件的加载和执行
10)CLR寄宿(下) 托管宿主
11)代码组(1) 对代码组的管理
12)代码组(2) 成员条件
13)代码组(3) 属性
14)基于角色的安全性编程入门示例
15)对称加密(1) 对称加密基本原理
16)对称加密(2) 对称加密算法
17)对称加密(3) NET对称加密体系
18)对称加密(4) NET对称加密实践
19)非对称加密(1)非对称加密原理
20)非对称加密(2)非对称加密算法
21)非对称加
阅读全文

摘要:
WIF(Windows Identity Foundation)是用于构建标识应用程序的框架。该框架将 WS-Trust 和 WS-Federation 协议抽象化,并向开发人员呈现用于构建安全令牌服务和声明感知应用程序的 API。应用程序可以使用 WIF 处理安全令牌服务颁发的令牌,并在 Web 应用程序或 Web 服务中,根据标识做出决策。
WIF具有以下主要功能:
阅读全文

摘要:
本实例要实现合作伙伴员工通过单一登录来尝试访问其他合作伙伴域中的资源。联合身份验证方案中有三个主要角色:标识提供方、声明提供方和信赖方。WIF会提供API 来构建所有这三个角色。
图15-11说明了典型的联合身份验证方案。在此方案中,Fabrikam员工希望无需重新登录即可访问 Contoso.com 资源,也就是使用单一登录。
阅读全文

摘要:
安全令牌服务(STS)是用于根据WS-Trust和WS-Federation协议构建、签署和颁发安全令牌的服务组件。实施这些协议需要进行大量的工作,但WIF能为你完成所有这些工作,让那些不精通协议的人不费吹灰之力即可启动并运行STS。可以使用云STS(如LiveID STS)、预先构建的STS(如ADFS 2.0),或者如果想要颁发自定义令牌或提供自定义身份验证或授权,可以使用 WIF构建自定义的STS。借助WIF即可轻松地构建自己的STS。
STS身份验证支持多种方案:
q 从身份验证机制中分离出应用程序和服务,从而使其能够专注于授权相关声明。
q 支持多种凭据类型,而不会使应用程序和服务的实现变复杂。
q 支持联合方案,用户可以通过在自身的域中进行身份验证来获得对另一个域中资源的访问权限(通过建立不同域的 STS之间的信任关系)。
q 简化标识委派方案,经过身
阅读全文

摘要:
基于声明的标识模型,简单来讲,就是将用户信息作为声明条件,向应用程序来提供用户标识。一个声明以是用户名,也可能是电子邮件地址。现在的想法是配置外部标识系统,为应用程序提供了解用户及其所做各个请求所需的所有信息,以及从可靠源接收的标识数据的加密保证。
基于声明的标识模型,更容易实现单点登录,并且应用程序可以彻底摆脱以下操作:
1) 对用户进行身份验证。
2) 存储用户账户和密码。
3) 调用企业目录以查看用户标识的详细信息。
4) 从其他平台或公司与标识系统集成。
在基于声明的标识模型中,应用程序将根据用户所提供的声明来做出与标识相关的决策。这可以是任何内容,从包含用户名字的简单应用程序个性化设置,到授予用户访问应用程序中高级功能和资源权限。
阅读全文

摘要:
WIF是一个开发框架,该框架集成了基于标识的安全模型和方案以及实现细节。WIF给我们带来的好处主要有三点:
q 基于声明的标识处理方式。
q 使业务逻辑与认证、授权彻底分离。
q 可供学习和扩展的安全架构。
本系列主要探讨它的基本原理,从中学习构建一个安全框架的基本要素和方法。重要的是从它的基本原理,了解标识安全的普遍术语和技术模型。
阅读全文

摘要:
为了保证文档的完整性,防止文档被篡改,同时确保文档的来源,Open XML提供对文档进行数字签名的支持。通过使用Office文档中的签名行捕获数字签名的能力,使组织能够对合同或其他协议等文档使用无纸化签署过程。与纸质签名不同,数字签名能提供精确的签署记录,并允许在以后对签名进行验证。
阅读全文

摘要:
当Office应用程序打开一个Office文档的时候,首先会进行校验,主要校验的是该文档的有效性和完整性。
当随便将一个exe文档的后缀改为docx时候,打开该文件肯定会报文件无效。对于一个Open XML文档,如果想去校验它,可以从如下几个方面:
q 是不是ZIP压缩包
q 必须的部件是否存在
q 关系是否完整
q 部件类型是否匹配
q 文件大小
q 宏和OLE对象
验证的方式也很多,这里给出最简单的方法,使用Open XML SDk中的OpenXmlValidator对象。代码清单14-24是如何验证一个Word文档有效性的方法。
阅读全文

摘要:
文档检查器是用来检查隐藏信息的,并提供了删除功能。现在再来看Office定义的个人信息,包括如下各项:姓名和缩写、公司和组织名称、计算机名、网络服务器和硬盘驱动器、其他文件属性和摘要信息、OLE对象、文档不同版本的作者信息、文档修订信息、文档版本信息、模板信息、隐藏文本、修订和批注。
当执行检查操作的时候,会列出含有隐藏信息的项,并给出删除功能,如图14-27所示。
阅读全文

摘要:
OLE(Object Linking and Embedding,对象连接与嵌入)不仅是桌面应用程序集成,而且还定义和实现了一种允许应用程序作为软件“对象”(数据集合和操作数据的函数)彼此进行“连接”的机制,这种连接机制和协议称为部件对象模型(Component Object Model,COM)。
OLE可以用来创建复合文档,复合文档包含了创建于不同源应用程序,有着不同类型的数据,因此它可以把文字、声音、图像、表格、应用程序等组合在一起。
但对OLE的支持也带来了一些安全性问题,如在Outlook 2002及以上版本中,黑客如果在邮件中嵌入危险OLE对象,就可以对其肆意伪装,有可能骗过用户导致安全问题。
OLE2是OLE对象的升级版本。
Office中的宏也是作为OLE2对象嵌入到文档中的,下面看在Word中创建一个Excel文档的例子。
阅读全文

摘要:
另外,在默认情况下,新的Open XML文件格式不执行文档中的宏和嵌入代码,还可以快速识别和删除文档中带有的身份信息和敏感信息,如用户名、备注和文件路径等。因此,以Open XML格式保存的文档将更加安全,可以放心地与他人进行文档的共享。
以Word 2007为例,打开Word选项→信任中心→宏设置,可以看到关于宏设置的选项。如图14-22所示。
阅读全文

摘要:
Custom验证模式提供了更灵活的可定制的证书验证方式,当需要自定义验证的时候,可以采用这种方式。以下代码是修改客户端验证为“Custom”模式后的相关配置。
设置客户端对服务端凭据验证模式为“Custom”:
阅读全文

摘要:
PeerOrChainTrust验证模式验证证书是否位于 TrustedPeople 证书存储区中,或通过构建证书信任链来验证证书。如果证书通过任一验证方法,就是受信任的。设置验证模式为“PeerOrChainTrust”的配置如以下代码所示。
在服务端设置验证客户端凭据模式为“PeerOrChainTrust”:
阅读全文

摘要:
ChainTrust验证模式使用证书链来验证 X.509证书是否有效以及是否由受信任的颁发者所颁发。它指定每个证书都必须存在于某个证书层次结构中,而该层次结构以位于证书链顶端的根证书颁发机构结束。它将验证 X.509证书是否由受信任的证书颁发机构颁发。通过搜索证书存储区并确定是否已将该证书颁发机构的证书指定为受信任的证书,可以做到这一点。为了使 WCF能够做出此判断,必须将证书颁发机构证书链安装在正确的证书存储区中。
因为 Windows附带一组默认的用于受信任证书颁发机构的证书链,所以可能不必为所有证书颁发机构安装证书链。
阅读全文

摘要:
当证书验证模式设置为“PeerTrust”时,服务端或者客户端会验证证书是否存在于TrustedPeople 证书存储区中。
修改配置文件采用“PeerTrust”验证模式如以下代码。
在服务端设置对客户端的验证模式设置为“PeerTrust”:
阅读全文

摘要:
需要说明的是,和服务器端证书配置在节中,而客户端配置在endpointBehaviors中。在代码清单11-19的服务端配置和代码清单11-23的客户端配置中,都将certificateValidationMode属性设置为“None”。protectionLevel设置为"EncryptAndSign",由于证书验证采用的是SSL加密,仅支持EncryptAndSign的保护级别。
此时启动服务端进行监听,然后启动客户端,得到如图11-11所示的异常信息。
阅读全文

摘要:
serviceCredentials下的clientCertificate配置,可以定义一个用于在双工通信模式中对从服务发送到客户端的消息进行签名和加密的X.509证书。如果服务必须事先拥有客户端的证书才能与该客户端进行安全通信,则需要使用此元素。使用双工通信模式时,会出现这种情况。在更为典型的请求/响应模式中,客户端会将其证书包含在请求中,服务将使用该证书对发送回客户端的响应进行加密和签名。但是,在双工通信模式中,服务没有来自客户端的请求,因此服务需要事先具有客户端的证书,以确保发送到客户端消息的安全。因此,必须通过带外协商来获取客户端的证书,并使用此元素指定该证书。在此元素中设置的证书用于仅针对配置有MutualCertificateDuplex消息安全身份验证模式的绑定加密发送到客户端的消息。
阅读全文

摘要:
书接上文,是哪一项配置使得WCF对传输的消息进行加密操作了呢?继续修改配置文件,客户端配置文件如代码清单1117所示,服务端配置文件如代码清单11-18所示。
代码清单11-18 修改客户端的protectionLevel
/en
阅读全文

摘要:
ServiceSecurityContext对象用于表示安全调用上下文。安全调用上下文保存在TLS中,沿着服务的调用链向下,每个对象的每个方法都可以访问当前的安全调用上下文。获得上下文的方法很简单,只需要访问ServiceSecurityContext对像的Current属性。这里需要注意ServiceSecurityContext对象的两个属性:PrimaryIdentity属性和WindowsIdentity属性。PrimaryIdentity属性包含了调用链最终客户端的身份,如果客户端未通过验证,该属性会被置一个空白身份,如果是Windows身份验证,那么会被赋予一个WindowsIdentity实例。WindowsIdentity属性只有在采用Windows身份验证时有效。
阅读全文

摘要:
默认情况下,NetTcpBinding会生成一个运行时通信堆栈,该堆栈使用传输安全。
NetTcpBinding类共有四个构造函数,分别如下:
q NetTcpBinding()。初始化NetTcpBinding类的新实例。
q NetTcpBinding(SecurityMode)。用所使用的指定安全类型初始化NetTcpBinding类的新实例。
q NetTcpBinding(String)。使用指定配置名称初始化NetTcpBinding类的新实例。
q NetTcpBinding(SecurityMode, Boolean)。用所使用的指定安全类型和一个指示是否显式启用安全会话的值来初始化NetTcpBinding类的新实例。
NetTcpBinding类有一个类型为NetTcpSecurity的属性,名为Security。NetTcpSecuri
阅读全文

摘要:
WCF角色服务能够从可以发送和使用SOAP消息的任何应用程序访问某个用户的角色。这可以包括不使用.NET Framework的应用程序。因此,这些不同应用程序的用户可以在每个应用程序中具有相同的角色。通常情况下,可以检查用户的角色来确定用户具有执行哪些操作的权限。
阅读全文

摘要:
Windows Communication Foundation (WCF) 身份验证服务使你能够使用ASP.NET成员资格,从可以发送和使用SOAP消息的任何应用程序中对用户进行身份验证。这可以包括不使用.NET Framework的应用程序。因此,这些不同的应用程序的用户不需要对每个应用程序使用单独的凭据。用户在使用任意客户端应用程序时,均可通过提供相同的凭据登录到应用程序中。本节就使用WCF身份验证服务的几个关键点做实践性分析。
阅读全文

摘要:
通过前文共同体验了强名称对程序集的保护方式和原理,但是这种保护的强度到底有多大呢?能有效地防御恶意篡改者吗?先看下面的例子。
回到上篇文章的代码清单9-7,重新对StrongNameReferenceLib项目进行强名称签名,然后编译StrongName项目。在StrongName项目的bin目录里有StrongNam.exe和StrongNameReferenceLib.dll两个文件,然后使用ILDasm打开StrongNameReferenceLib.dll文件,转储为il文件,这里使用记事本打开il文件,如图9-19所示。
阅读全文

摘要:
引用强名称程序集的过程对我们来说都是透明的,无需做额外的工作。可以通过这种方式来检验强名称程序集的作用。
首先创建一个类库项目StrongNameReferenceLib,对其进行强名称签名。
阅读全文

摘要:
强名称是由程序集的标识加上公钥和数字签名组成的。其中,程序集的标识包括简单文本名称、版本号和区域性信息(如果提供的话)。强名称是使用相应的私钥,通过程序集文件(包含程序集清单的文件,并因而也包含构成该程序集的所有文件的名称和散列)生成的。Microsoft® Visual Studio® .NET 和在 .NET Framework SDK 中提供的其他开发工具能够将强名称分配给一个程序集。强名称相同的程序集应该是相同的。
通过签发具有强名称的程序集可以确保名称的全局唯一性。强名称满足以下要求:
1) 强名称依赖于唯一的密钥对来确保名称的唯一性。程序集名称不会与任何其他程序集名称相同,因为用一个私钥生成的程序集的名称与用其他私钥生成的程序集的名称不相同。
2) 强名称保护程序集的版本沿袭。强名称可以确保没有人能够生成程序集的后续版本。用户可以确信,他们所加
阅读全文

摘要:
在ASP.NET、SQL Server、WCF等通信领域,微软都提供了基于SSL的安全保护机制。遗憾的是,.NET并没有对SSL协议本身提供像TCP、UDP这样的基础网络协议的编程性支持。如果想从协议的角度处理SSL通信或者想构建完整的SSL框架,那么.NET帮不上你,但是还有选择,许多第三方安全通信的项目提供了支持,比如OpenSSL。这不意味着我们在此领域将无所作为,第6章介绍了.NET中操作数字证书的两个类:
q System.Security.Cryptography.X509Certificates.X509Certificate2类
q System.Security.Cryptography.X509Certificates.X509Store类
在Web开发中,SSL通信由浏览器和Web服务器来实现通信细节。封装了HTTP协议的WebRequest、WebResp
阅读全文

摘要:
HTTPS(Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即在HTTP下加入SSL层,HTTPS的安全基础是SSL。它是一个URI scheme(抽象标识符体系),句法类同“http:体系”。用于安全的HTTP数据传输。“https:URL”表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统的最初研发由网景公司进行,提供了身份验证与加密通讯方法,现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。简单的HTTPS通信过程如图所示。
阅读全文

摘要:
事实上各位读者已经明白了SSL的工作原理,回顾我前面博客讲到的公钥加密的通信原理,而SSL使用的就是公钥加密系统。现在完全可以构想基于SSL的数据通信流程。前面说过,SSL是一种协议,本节重点在于协议本身和它是如何工作在各种协议之间来提供安全通信的。
SSL协议位于TCP/IP协议模型的网络层和应用层之间,使用TCP来提供一种可靠的端到端的安全服务,它使客户/服务器应用之间的通信不被攻击窃听,并且始终对服务器进行认证,还可以选择对客户进行认证。SSL协议在应用层通信之前就已经完成加密算法、通信密钥的协商,以及服务器认证工作,在此之后,应用层协议所传送的数据都被加密。
阅读全文

摘要:
到目前为止,只是讨论了访问控制规则,它们构成了对象的DACL。DACL可以由对象的所有者任意更改,还可以由所有者已经给予其更改DACL权限的任何人更改。对象的安全描述符包含另一个规则列表,称为系统访问控制列表(System Access Control List,SACL),该列表将控制系统对对象执行哪个类型的审核。
审核是一种具有安全敏感性的操作。在Windows中,审核只能由本地安全机构(Local Security Authority,LSA)生成,因为LSA是唯一允许向安全事件日志(这里存储了审核)中写入项的组件。安全审核是一项非常严谨的业务,可以在计算机法庭中根据事实分析谁做了什么事情,以及谁试图在系统中做什么事情。很多组织都长年保留它们的审核日志。不用说,规定对哪些项目进行审核的设置通常都受到严格的管理控制。如果执行该节中的代码并且遇到UnauthorizedAccessExcept
阅读全文

摘要:
为方便起见,访问规则被公开为集合。该集合是只读的,因此对它的规则进行的所有修改都必须通过FileSecurity对象的专用方法(例如AddAccessRule、SetAccessRule和RemoveAccessRule)执行。集合内部的规则对象也是不可改变的。要了解为什么拒绝规则优先于允许规则,必须知道访问检查算法是如何工作的。当执行访问权限检查时,将按照规则在访问控制列表内部出现的顺序对它们进行评估。在代码清单7-11中,当检查用户Xuanhun的访问权限时,会首先评估拒绝Xuanhun读取访问的规则,然后再评估授予BUILTIN\Everyone读取和执行访问权限的规则。一旦做出允许或拒绝的决策,评估就将停止。这就是拒绝规则“生效”的原因。如果它们被放置在允许规则之后,则它们不会总是执行它们的预期功能。
和可以添加新的访问规则一样,还可以移除现有的访问规则。但是注意,在从用户那里撤回某项权
阅读全文

摘要:
如何在创建文件的初始就分配权限呢?这样做有一个重要的安全原因:可确保安全的对象总是用一些默认的安全语义创建的。默认情况下,分层式资源管理器(例如文件系统或注册表)中的对象从其父对象中继承它们的安全设置,文件从它们的父目录中继承它们的安全设置。默认权利取决于所创建对象的类型,而且可能不是您所希望的那样。例如,您很少会有意创建每个人都具有完全访问权限的对象,但这却可能恰好是默认安全设置所指定的权限。不能简单地用默认安全设置创建对象并且在以后修改这些设置,产生此问题的原因是:在已经创建对象之后对其加以保护会打开一个机会窗口(在创建和修改之间),在此期间,该对象可能被劫持。劫持可能导致创建者失去对刚刚所创建对象的控制,这会造成灾难性的后果。代码清单7-10演示了在如何创建文件时配置访问规则。
阅读全文

摘要:
权限的概念相信你已经不陌生了,那么如何设置一个文件的访问权限呢?编程可不可以实现动态的控制文件权限信息呢?答案是肯定的,.NET可以做到这些。本节会给您一个完整的演示。
自由访问控制列表(Discretionary Access Control List,DACL)(有时缩写为ACL)是一种 Microsoft Windows NT 和更高版本用于保护资源(例如文件和文件夹)的机制。DACL包含多个访问控制项(Access Control Entry,ACE)。访问控制项将一个主体(通常是一个用户账户或用户账户组)与一个控制资源的使用的规则相关联。通过DACL 和ACE,可以基于与用户账户关联的权限允许或拒绝资源的权限。例如,可以创建一个ACE,并将其应用于某个文件的DACL,以阻止除管理员以外的任何人读取该文件。
系统访问控制列表(System Access Control List,S
阅读全文

摘要:
非对称加密在理论上似乎比对称加密简单,但是在实际应用中的细节却复杂得多,为了能由浅入深地理解.NET中的非对称加密,本小节分步理解其中的细节。
非对称密钥
当使用一个非对称加密类创建一个该类的实例的时候,构造函数会生成一个“公钥/私钥”对。我们可以选择是否保存该密钥和保存的方式。
先从代码清单6-8的内容来熟悉下非对称密钥的密钥结构。
代码清单6-8 输出非对称密钥
阅读全文

摘要:
与对称加密算法相同,所有的非对称算法的相关类也存在于System.Security.Cryptography命名空间中。在该命名空间中,.NET框架提供了RSA、DSA、ECC、Differ-Hellman共四种非对称加密算法的实现。本节介绍其中几种主要的相关类和接口。具体应用的相关内容将在下一节进行介绍。
阅读全文

摘要:
基本流程很简单,那么公钥加密,私钥解密的算法原理到底是什么呢?本节简要阐述RSA算法、DSA算法、ECC算法、Diffie-Hellman算法的基本原理,其中涉及很多数论、离散数学以及解析几何方面的数学知识,感兴趣的读者可以借此加强相关理论基础。
阅读全文

摘要:
现在我们已经知道对称加密的一个最大的问题是如何安全地传输密钥,并且在对称加密的体系下找不到好的解决方案。1976年,美国学者Dime和Henman为解决信息公开传送和密钥管理问题,提出一种新的密钥交换协议,允许在不安全媒体上的通讯双方交换信息,安全地达成一致的密钥,这就是“公开密钥系统”。相对于“对称加密算法”这种方法也叫做“非对称加密算法”。
与对称加密算法不同,非对称加密算法需要两个密钥:公钥(publickey)和私钥(privatekey)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密;如果用私钥对数据进行加密,那么只有用对应的公钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫做非对称加密算法。
阅读全文

摘要:
在使用.NET框架提供的加密算法实现类来执行加密任务时,需要准备加密密钥和初始化向量(Initialization Vector,IV)。基于对称加密的特点,在加密数据之后一定要保存好密钥和初始化向量,因为解密要用到它们。但是对于不同的数据加密,要使用不同的密钥和初始化向量,理论上每次新的加密过程都应该使用全新的密钥和初始化向量。
通常需要将加密密钥和初始化向量传递给另一个人,这时候需要使用非对称加密算法来加密密钥和初始化向量,然后在网络上传输。本节主要演示如何使用加密实践类,更多的应用内容会在本书的第四部分介绍。
那么如何创建加密密钥和初始化向量呢?有两种基本方法,一种是使用加密算法实现类的构造函数,另一种是使用GenerateIV()和GenerateKey()方法生成密钥和初始化向量。
阅读全文

摘要:
本节介绍System.Security.Cryptography名称空间中的对称加密类。
阅读全文

摘要:
经典的对称加密算法是DES算法,后来又衍生出3DES、TripleDES等增强型的DES算法。此外,.NET还提供了RC2、Rijndael等对称加密算法。下面分别详细介绍。
阅读全文

摘要:
对称加密是计算机加密领域最古老也是最经典的加密标准。虽然对称加密被认为不再是安全的加密方式,但是直到现在,我们还看不到它被淘汰的迹象。在很多非网络化的加密环境中,对称加密足以满足人们的需要。
对称加密采用单密钥加密方式,不论是加密还是解密都是用同一个密钥,即“一把钥匙开一把锁”。对称加密的好处在于操作简单、管理方便、速度快。它的缺点在于密钥在网络传输中容易被窃听,每个密钥只能应用一次,对密钥管理造成了困难。对称加密的实现形式和加密算法的公开性使它依赖于密钥的安全性,而不是算法的安全性。
阅读全文

摘要:
为了能更好地理解.NET基于角色的安全性,从一个最简单的实例导入角色的应用。首先创建一个简单的控制台程序,如代码清单1-1所示。
代码清单1-1 未添加角色验证的程序
阅读全文

摘要:
代码组可以具有一些属性,这些属性可影响公共语言运行库确定程序集允许的权限集的方式。可应用到代码组的属性有两种:Exclusive和LevelFinal。
Exclusive属性,策略级别允许的权限集是与具有此属性的代码组关联的权限集。在考虑所有策略级别时,运行库向代码授予的权限绝对不会多于与Exclusive代码组关联的权限。在给定的策略级别内,代码只能是具有Exclusive属性的一个代码组的成员。在运行库计算独占代码组中的程序集的权限时,该属性会防止考虑同一策略级别中的其他代码组。但仍会计算当前级别之下和之下的策略级别。该属性允许一个特定代码组为当前策略级别针对向与该组匹配的程序集授予什么权限的问题做出唯一决定。这在需要向特定程序集授予特定权限集而不允许来自同一策略级别上的其他代码组匹配项的权限时很有用。
阅读全文

摘要:
在创建代码组的过程中,简要熟悉了代码组的成员条件,在安全策略的实施过程中,可以认为,所有符合该代码组成员条件的程序集都属于该代码组。成员条件的实现形式是类型,每种成员条件对应一种类型。
阅读全文

摘要:
代码组为我们提供了通过配置方式来实现代码访问安全性的途径。通过代码访问安全性策略工具——Caspol.exe,可以创建、删除、更改代码组。
代码组实质是一个条件表达式和一个权限集。如果程序集满足该条件表达式,那么就会被授予该权限集。每个策略级别的代码组集是按树的形式组织的。
代码组同时可以通过属性来说明如何定义安全策略。
对代码组的管理可以使用两个工具,一个是.NET Framework配置工具,一个是Caspol.exe。为了演示这两个工具的使用,对代码组的查看采用Caspol.exe,从命令行操作;对代码组的创建、修改和删除,使用.NET Framework配置工具从图形界面来操作。
阅读全文

摘要:
通过托管代码来管理CLR的方式,称为托管宿主。想实现托管宿主很简单,只要实现System.AppDomainManager类就可以了。AppDomainManager类的定义如代码清单1-1所示。
阅读全文

摘要:
托管exe文件的加载和执行过程在之前的文章做过简要的介绍,现在结合本章的内容进行详细的分析。
阅读全文

摘要:
MSCOREE.DLL负责选择.NET版本、调用和初始化CLR等工作。非托管程序想要启动CLR也必须引用MSCOREE.DLL,利用它的导出函数加载托管代码和进行定制CLR等操作。既然现在的焦点集中在MSCOREE.DLL,下面一同来看它的庐山真面目。
阅读全文

摘要:
我们都知道,进程是操作系统进行资源调度和分配的基本单位,每个进程实际代表了当前应用程序从启动到结束的全部过程。对于Windows中的每一个.exe文件,在运行时都要由一个进程来承载它。与非托管.exe文件不同的是,托管.exe文件并没有直接将程序集加载到当前进程当中,而是将程序集加载到应用程序域中,然后将应用程序域加载到进程中。每个进程可以承载多个应用程序域。因此,对于托管程序,每个进程可以承载多个应用程序,这同时也提升了应用程序的性能,因为进程的切换所耗费的性能要多于应用程序域的切换。
阅读全文

摘要:
在上一篇博客(说说emit(上)基本操作)中,我描述了基本的技术实现上的需求,难度和目标范围都很小,搭建了基本的架子。在代码中实现了程序集、模块、类型和方法的创建,唯一的缺憾是方法体。
方法体是方法内部的逻辑,我们需要将这个逻辑用IL代码描述出来,然后注入到方法体内部。这里自然地引出两个主题,IL代码和用来将Il代码注入到方法体内的工具(ILGenerator)。本篇博客将主要围绕这两个主题展开。但是这一篇博客不可能将IL讲的很详细,只能围绕ILGenerator的应用来讲解。
阅读全文

摘要:
今天要谈论的主题是Emit,反射的孪生兄弟。想要通过几篇博客详尽的讲解Emit也是很困难的事情,本系列计划通过两个简单的实例来讲解,计划写三篇博客:
1) 说说Emit(上)基本操作;
2) 说说Emit (中)ILGenerator;
3) 说说Emit (下)Emit在AOP和单元测试中的应用;
这几篇博客不可能涵盖Emit所有内容,只希望能让您知道Emit是什么,有哪些基本功能,如何去使用。
阅读全文
