过去,安全结构提供了基于用户帐号的隔离和访问控制--在这些限制内给予代码完全访问权,并假定由特定用户可运行的代码具有相同的信任度 。不幸的是,如果所有程序都代表某用户运行,根据用户对代码的隔离对于保护一个程序不被其它用户使用是不够的 。另一种情况,不能被完全信任的代码经常被转移到"沙箱"模型中执行,在此代码运行于隔离环境,而不会访问大部分的服务 。
对今天应用程序的成功的安全解决方案必须能强化两个安全模型间的平衡 。它必须提供对资源的访问 , 以便以完成有用的工作 , 它需要对应用程序的安全性作细致的控制以确保代码被识别,检测 , 并给予合适的安全级别 。.NET Framework就提供了一个这样的安全模型 。
Microsoft .NET Framework安全解决方案
.NET Framework安全解决方案基于管理代码的概念,以及由通用语言运行时(CLR)加强的安全规则 。大部分管理代码需要进行验证以确保类型安全及预先定义好的其它属性的行为的安全 。例如,在验证的代码中,声明为接收4字节值的访问将拒绝提供8字节参数的调用,因为不是类型安全的 。验证过程还确保了执行流只传送到已知的位置,如方法入口点--这个过程去除了跳转到任意位置执行的能力 。
验证将阻止不是类型安全的代码执行,在它们引起破坏前捕获很多常见的编程错误 。通常的弱点--如缓存溢出,对任意内存或没有初始化的内存的读?。钥丶乃嬉獯?-都不再可能出现 。这将使最终用户受益,因为在他们执行代码前对其进行检查 。这也有益于开发人员 , 他们会发现很多常见错误(过去一直在困绕前开发)现在可以查明,并能阻止它们引起破坏 。
CLR也能使非管理代码运行,但非管理代码不能从这些安全措施中受益 。特殊的许可与对非管理代码的调用能力相关 , 一个强大的安全策略能确保这些许可被恰当地给予 。经过很长时间后,非管理代码到管理代码的移植将减少对非管理代码的调用频率 。
微软.NET Framework安全机制的构件
基于证据的安全
.NET Framework引入了"基于证据的安全"的概念 。在本质上,它是对安全策略暴露出来问题的解答:
· 组合从哪个站点获得?
组合是.NET Framework应用程序的构件 。它们组成了部署 , 版本控制,重用 , 激活作用域,安全认证的基本单元 。应用程序的组合是从网站上下载到客户端的 。
· 组合是从哪个URL获得的?
安全策略需要明确的地址,而组合是从这个地址下载的 。
· 组合是从哪个区获得的?
区是基于代码的位置,对安全标准,如 Internet, intranet和本机等等 , 的描述 。
· 组合的强名(strong name)是什么?
强名是由组合的创建者提供了密码强化后的标识符 。尽管它没有提供对创建者的任何证明,但它唯一标识了组合,确保了组合没有被破坏过 。
根据对这些问题的回答,及其它证据,安全策略可以对赋予组合垢合适许可进行计算 。从多种来源可以得到证据,包括CLR,浏览器 , 微软ASP.NET,及外壳--这依赖于代码的来源 。
策略驱动的信任模型使用代码证据
当组合被调入内存进,CLR策略系统通过收集组合的证据并在策略环境中对证据进行计算,从而决定赋予组合什么样的许可权 。CLR策略系统然后根据评估过的证据和组合作出的许可请求给予组合一组许可 。只有在组合被给予了一组最少的许可后,或组合根本不需要许可权,组合的创建者才能知道组合正确运行 。通过一个或多个对特定许可的请求,这样的附加需求可以被传送室策略系统 。
推荐阅读
- 怎么把移动硬盘隐藏文件,怎么把移动硬盘隐藏文件导出来
- 怎么把文件下载到u盘,怎样把文件下载到u盘上
- 最好的vr体感格斗游戏,最好的vr体感格斗游戏有哪些
- 录视频什么手机不压缩,手机视频不压缩画质
- java代码怎样看闰年 用java判断一个年份是闰年还是平年
- 新媒体人如何正确引导舆论,新媒体时代如何做舆论引导
- flutter原生交互ios,flutter 原生
- 直播带货道歉,直播带货失误
- linux命令查看串口 linux怎么查看串口号