请解释C#中代码访问安全性的定义及其底层实现机制?
考察说明
考察对C#安全机制的理解及底层实现原理的掌握程度。
回答思路
- 【回答框架 1】代码访问安全性是.NET框架提供的一种安全机制,用于基于代码的来源和身份,而非运行代码的用户,来控制代码对受保护资源的访问权限。它通过权限集合来决定代码是否有权执行特定操作。
- 【回答框架 2】底层实现基于CLR的安全系统,通过证据(如程序集签名、来源地址)在加载时评估权限,利用安全透明度(Security Transparency)和关键对象(SecurityCritical)等特性,结合栈遍历(Stack Walk)来验证调用链中所有调用者的权限。
- 【回答框架 3】代码访问安全性通过声明性安全属性(如[PermissionSet])和命令式安全检查(如Permission.Demand())来实现,涉及权限对象、权限集和策略解释器,在运行时执行访问控制。
- 【回答框架 4】现代.NET Core背景下,代码访问安全性主要用于特定场景,如插件系统,利用沙箱和权限边界,但传统CA在.NET Core中简化,更依赖于操作系统隔离和信任边界。
- 【关键点 1】代码访问安全性基于代码来源和身份,而非用户身份。
- 【关键点 2】底层通过CLR加载时评估证据分配权限。
- 【关键点 3】栈遍历是CAS核心机制,确保调用链每个调用者都被授权。
- 【关键点 4】声明性和命令式两种方式实现安全检查。
- 【关键点 5】现代.NET中CAS已简化,多用沙箱和OS隔离。
- 【易错点 1】过度依赖CAS而忽略操作系统级安全措施。
- 【易错点 2】在.NET Core中错误地假设CAS完全可用,实际已有所简化。
- 【易错点 3】忽略安全透明性的影响导致安全检查绕过。