任何现实世界中使用的“代码访问安全性”?(Is “Code Access Security” of

2019-07-28 17:59发布

警告:

.Net和对.NET核心的新版本已经删除了和/或改变“代码访问安全性”(CAS),因为这个问题被问。

原题:

我在学习的过程70-536 .NET框架-应用程序开发基础考试 ,因为我已经有很多年的编程.NET,这应该不难!

但是我有了解“代码访问安全性”(CAS),因为我从来没有需要使用或配置它,我想知道是否有人为它找到一个现实生活中的使用情况?

请提供当你使用CAS的例子,它一直是解决方案的一部分,而不是问题。

(到目前为止,一切不得不任务我曾在我多年的.NET编程做一些关系)


相关的问题:

  • 为什么要使用CAS(代码访问安全性)? - 这有极少数的现实世界的例子除了微软如何使用它。
  • 真的有人使用代码访问安全性来保护他们的组件和/或方法?
  • 什么是代码访问安全的.NET -定义CAS不错,但并没有给实际的例子。
  • 。 NET代码访问安全性:有用的或只是过于复杂?

结果为止。

  • 当你正在主持第三方代码CAS是非常有用的。 如Web托管公司可以用它来停止对服务器的客户的Asp.net代码做损害。 (办公室还利用它当.NET用作VBA的替代品)

  • 它的唯一的详细示例中使用微软应用程序之外,到目前为止有:

    最近的一个项目我也有类似的东西:允许用户上传库,并测试其性能(“谁使最好的算法”)。 不用说,我们需要大量CAS那里。

  • CAS似乎得到JITDC认证有用,就是喜欢由美国国防部门,但是我不知道是否CAS是任何真正的价值,或者如果它只是盒子滴答。

(如果您需要绕过使用CAS主机和你对他们有管理员权限的机器,你可以把你的组件在GAC)。

展望未来, CAS是.NET 4少了几分复杂 。


至少它看起来像微软的新的考试不会有“基础”的考试,其中包括CAS。 我不知道这是否会使其进入新的WinForms / WPF考试。

Answer 1:

我遇到的代码访问安全性往往在“现实世界”,经常在我最期待的。 在某种程度上,Silverlight的将是它的一个极好的现实世界的应用程序,如果不是那SilverLight的选择不采用CAS在所有到底。

托管服务提供商

在这里你看到它在行动的地方就是需要一个安全的环境:ASP.NET本身的课程,但ASP.NET主机提供商使用修改后的安全模型 ,以防止入侵其宝贵的系统。 我知道对于Webhost4Life使用这个事实(在他们的关于它的网站的任何信息,但我和他们一起工作,它的存在,真的)。 进一步看,其他的ASP.NET主机服务商做同样的,但他们不是很清楚之一: 线程godaddy.com不希望改变CAS(没有明晰什么支持,什么不可以),或在1&1此相关的讨论 。 有些云托管网站(rackspacecloud)把它远一点和“与微软合作的修改完全信任级别”任何可能。

简而言之:如果你发现一个ASP.NET主机,最有可能他们已经使用CAS,以防止你做的事情,他们不希望你做的事。 他们甚至可以用它制作的“基本”(很多限制)之间的托管和“企业”(一些限制)托管差这给整个其他的意义CAS。

CAS的其他应用

这么多,我遇到了我的几个真实世界的情况。 最近的一个项目我也有类似的东西:允许用户上传库,并测试其性能(“谁使最好的算法”)。 不用说,我们需要大量CAS那里。 其他的例子或有趣的资源:

  • NAR装载机 (一CodeProject上的应用程序)使用它自己的CAS
  • LR计算器 (也CodeProject上的应用程序)使用CAS
  • ClickOnce的(见下文)使用CAS
  • CAS设计模式 :它的受欢迎程度“假设”正在使用CAS
  • 了解CAS :更大的普及和一些评论暗示应用
  • 微软SharePoint使用CAS一路,似乎(对不起,我不是一个SP专科)

对于您只是在完全控制自己的任何情况,你建立你自己的应用程序和代码(或有它内置),并在你的系统的完全控制,我不认为你需要CAS过于频繁。 这是更多的东西,你会使用你从较小的可信来源运行的代码(这基本上是一切,这不是在你完全控制)分钟。

CAS VS的ClickOnce

默认CAS设置限制从网络共享或其他非本地源运行代码的能力。 这是有道理的,但在严格的限制使其难以对分布式应用程序的中央存储库。 .NET 2.0中引入的ClickOnce,本该是(提升安全性在这里讨论 )。

ClickOnce的本身使用CAS ,以防止安装程序将调用系统功能。 因此,我相信这可以说是最好的众所周知的应用程序,它依赖于CAS。

点是:你需要了解CAS能够创建可直接从共享运行,或者你忽略这一切,并使用的ClickOnce东西。

微软对CAS调查

在2005年,微软传唤调查 ,找出原因CAS是如此不得人心,希望能改进它,使之更好地适用。 不幸的是,我无法找到实际的调查结果,其他然后这个帖子有点详细说明为什么CAS被充分利用。

CAS在另一个世界

那个帖子,但是,并指向一个有趣的利基:CAS应用到了另一个世界:Unix / Linux操作系统。 他们不把它称为CAS,而不是它的BitFrost 。 是如何形成的现实世界的应用程序:在“人人电脑儿童”项目 ,依靠BitFrost作为传统的Unix安全模式的替代品。

更新:在Unix / Linux操作系统作为BitFrost CAS和部分在调查部分。
更新:增加 CAS VS的ClickOnce节
更新:使用CAS资源加入列表(和道歉行中的所有这些更新!)



Answer 2:

从技术上讲,这是非常有用的,因为它允许非常细粒度的权限规范。 这是为你们俩好(在理论上它使利用的安全漏洞了很多困难 - 即使在您的应用程序的攻击者获得完全控制权,他依然锁定在CAS沙箱),并为您的客户(因为他们可以清楚地看到你的应用程序可以做和经营自己的安全审计)。

在实际使用中,它的主要意义。 我认为它太复杂,太受可用的开发工具支持一点和大多数用户不关心反正。

当然也有(政府和客户谁真正知道.NET / CAS),我很想说,CAS是绝对有用的,强制性的例外情况,但现实情况讲清楚的语言。



Answer 3:

请读者注意:请参见下面的两点意见; 这听起来像我意外地膨胀CAS的定义(错误地)包括RBS。 我会离开这里的答案以供参考,但要注意区分。


有两个havles到CAS; 你会在考试看到最关注的事情是所有的代码调用其他代码的细微差别,这可能是部分信任有用,但大多数时候它只是一个痛苦-更糟糕:如果你的代码具有完全信任(其中大部分/太太多一样) 没有它实际上执行 (这完全跳过)。

CAS RBS的有用部分是主体权限,这用来; 当然,你的UI应该验证访问功能,但你可以把(在低下来逻辑):

[PrincipalPermission(SecurityAction.Demand, Role = "ADMIN")]
static void DeleteOrder(int id) { ... }

这即使在完全信任强制执行; 你可以定义自己的本金(绑定到用户)通过实现IPrincipal (看IsInRole() 而且,由于校长在大多数环境中(的WinForms,web表单,MVC,WCF等)的支持这可以使一个非常灵活的方式来仔细检查,在业务层的安全性,而不必引用特定的安全模型 。 需要注意的是,上述检查将在任何环境中工作。

您也可以或许用它来驱动你的UI。 我也有一个新闻组帖子说启用基于主/禁用WinForms控件(使用运行时属性指定每个控制的角色,有点像ToolTip等) -我不能在一分钟发现,虽然(编辑: 也许这一个 )。



Answer 4:

要了解有关代码访问安全的事情是,它很少使用超出理解应用程序开发人员如何使用它,并在对API的,你可能会调用哪些权限级别。 唯一的例外,我真的发现有用的是一个叫CAS的PrincipalPermission,它基本上不容许如果有合适的角色不是为当前主要定义为执行特定的代码。 在它上面看到这个帖子:

http://www.coderjournal.com/2008/03/securing-mvc-controller-actions/

真正需要关注CAS以及应如何在其应用程序中实现开发商是框架和代码库的开发者。 因为有你需要序要求您的应用程序与非托管资源,如文件,网络流,串行端口等,或者,如果你正在创建像一些speicalized非托管资源的代码打交道时,尤其是工作的信任一定水平服务器,或任何形式的在你的组件你将要围绕它创建一些代码访问安全性,因此人们不会允许执行的东西,一直严格拒绝他们的低级别的访问。

它并不能帮助微软还没有真正做到这一点伟大的工作,解释如何CAS应在每天的应用中使用的。 所以这是真的缺乏使用的原因。 然而CAS是众多原因之一.NET这样的安全语言和比竞争对手的问题少了很多困扰。



Answer 5:

我是在一个项目得到开发领导JITC认证的基于.NET的解决方案(美国国防部)和中科院设置进行认证测试过程中非常仔细地检查。

最喜欢的其他认证要求,代码只能用它需要工作的特权并没有更多的。

如果您计划获得安全认证的CAS可以肯定地是重要的。



Answer 6:

你应该知道的一件事是代码访问安全性是非常坏为防篡改的方法。 看到:

CAS防篡改折断了软件许可的后果

...

代码访问安全性可以不再依靠以防止在出货产品中使用篡改组件。 这意味着,如果你的应用程序依赖于代码访问安全进行许可检查,这是微不足道的攻击者替换为其他您的许可组装,从而获得您的应用程序可以免费使用。

...



Answer 7:

虽然我从来没有使用过它,我CAS的理解是,它也可以用于扩大面向对象的设计机制。 例如,假设您正在开发必须实现数据库访问和缓存银行大规模的数据访问包。 即使他们是相同的部署计划的一部分,考虑到该项目的假想大小,逻辑应该在单独的组件,因为它们有足够的不同的问题集,不同的外力(数据库基础架构VS消费者使用)铰链实现。

然而,缓存代码可能需要访问该整体包装的消费者不应该访问的数据访问组件,一些敏感的类或方法。 因此,这些数据访问类和方法,不能简单地将public 。 在数据访问组件的保护方法,在缓存组件的子类可以让周围的一些情况,但往往时候,它继承的滥用。 这可能仅仅是更优雅离开他们public与放置在呼叫者的自定义权限(例如LinkDemands DataPackagePermisson ),管理员只授予缓存组件。



Answer 8:

我们使用CAS为我们的应用程序是不是真的着急,因为我们只是想试图阻止unauthuorized代码执行。 存在的问题提出了使用我们的本地网络共享软件曾经采用过,但CAS-政策清理问题出来了。

  1. 我们确保使用强名称我们所有的组件。
  2. 我们创建了中科院政策与我们的强名称的所有组件,并允许我们的强名称签名代码从局域网和本地定位代码开始。
  3. 从局域网需要(刻录数据光盘组件)访问本地文件加载的程序集需要得到所有公共类的链接需求的属性。

由于更新.NET3.5我们的问题不存在了,因为局域网络上类似代码的本地代码现在处理。



文章来源: Is “Code Access Security” of any real world use?