Is “Code Access Security” of any real world use?
更新的版本(。NET和。NET的核心被删除和/或改变安切洛蒂有"代码访问安全性(CAS)"。这个问题是问。
原来的问题:
我在学习的过程中为70~536 .NET Framework应用程序开发基础考试,我已经很多年了。NET的编程,本不应该是硬的!
但是我有去了解代码访问安全性(CAS)",我从来没有一个需要使用或配置它,我想知道,如果别人已经发现A现实生活中使用它?
请提供一个例子,当你使用CAS和它已部分解决方案,而这样的问题。
(目前为止一切有一些关系到工作i有待办事项在我年的.NET编程)
相关问题:
- 为什么使用CAS(代码访问安全)?这是一些真实世界的例子。除了微软IT知识的使用。
- 任何人可以使用代码访问安全和保护他们的组件和/或方法?
- 什么是代码访问安全性以及在.NET定义CAS,但不给真实的例子。
- NET代码访问安全或只是overcomplicated:有用吗?
结果为止。
CAS是有用的当你是第三方托管代码。例如a Web托管公司的CAN使用它停止他们的ASP.NET代码做损害客户的服务器。办公室化妆。所以使用它时,是用来作为一个替代的VBA)
详细的例子是唯一使用它以外的应用:微软是那么远
A recent project I did had something
similar: allow the user to upload a
library, and test it for performance
("who makes the best algorithm").
Needless to say, we needed CAS heavily
there.CAS似乎是有用的jitdc得到认证,这是由美国国防部样..我不知道如果有任何真实的CAS值,或如果它只是箱的时间。
(如果你需要一个主机旁路使用CAS和你有管理员权限在他们的机器,你可以把你在GAC组件)。
期待,CAS是一位不复杂。4。
至少它看起来像我的新微软不会有一个"基础"考试,包括CAS。我不知道,如果它想让它进入我的WinForm的/新的WPF。
在"现实世界"中,我经常遇到代码访问安全问题,通常是在我最意想不到的时候。在某种程度上,如果不是Silverlight最终选择不使用CA,Silverlight将是它的一个非常好的现实应用程序。
宿主提供程序在实际操作中,您可以看到需要安全环境的地方:当然,ASP.NET本身,但是ASP.NET宿主提供程序使用修改过的安全模型来防止对其宝贵系统的入侵。我知道webhost4life使用这个工具(他们的网站上没有关于它的信息,但我已经和他们合作过了,它就在那里,真的)。进一步看,其他ASP.NET宿主提供程序也做同样的事情,但他们也不太清楚:godaddy.com上的线程不想更改CA(也不清楚支持什么和不支持什么),或者1&1上的相关讨论。一些云托管站点(rackspaceCloud)做得更进一步,"与微软合作,以获得修改后的完全信任级别",无论这是什么。
简而言之:如果你找到一个ASP.NET主机,他们很可能使用了CA来阻止你做他们不希望你做的事情。他们甚至可以使用它来区分"基本"(许多限制)托管和"企业"(很少限制)托管,这给了CA一个全新的含义。
CAS的其他应用在现实生活中我遇到了很多这样的情况。我最近做的一个项目有类似的东西:允许用户上传一个库,并测试它的性能("谁是最好的算法")。不用说,我们在那里非常需要CAS。其他示例或有趣的资源:
- NAR加载器(一个代码项目应用程序)使用它自己的CA
- LR评估器(也叫codeproject app)使用CA
- ClickOnce(见下文)使用CA
- CAS设计模式:它的流行是"假设"使用CAS
- 理解CA:更受欢迎,一些评论意味着应用程序
- Microsoft SharePoint似乎一直在使用CA(抱歉,我不是SP专家)
对于任何你完全控制自己的情况,你建立自己的应用程序和代码(或建立它),并完全控制你的系统,我认为你不需要太频繁的CA。更重要的是,当你从不太可信的来源(基本上是所有不在你完全控制范围内的东西)运行代码的时候,你会用到更多的东西。
CAS与ClickOnce默认cas设置限制从网络共享或其他非本地源运行代码的功能。这是有道理的,但是严格的限制使得很难为分布式应用程序建立一个中央存储库。.NET 2.0引入了ClickOnce,它应该提高安全性(此处讨论)。
ClickOnce本身使用cas,以防止安装程序调用系统函数。因此,我认为它可以说是最著名的依赖于CA的应用程序。
要点是:您需要了解CA才能创建可以直接从共享中运行的内容,或者忽略所有内容并使用ClickOnce。
微软对中国科学院的调查2005年,微软召集了一项调查,以找出中科院为何如此不受欢迎,并希望改进它,使之更好地适用。不幸的是,我找不到实际的调查结果,另外这篇文章稍微详细说明了为什么CAS被低估了。
另一个世界的CAS然而,这篇文章确实指出了一个有趣的利基:CA应用于另一个世界:Unix/Linux。他们不叫它cas,而是bitfrost。对于现实世界中的应用程序来说,情况如何:"每个孩子一台笔记本"项目,它依赖于bitfrost来替代传统的Unix安全模式。
更新:Unix/Linux中的cas部分(bitfrost)和survey部分。更新:添加了cas与clickOnce部分更新:添加了使用CA的资源列表(并为连续的所有这些更新道歉!)
从技术上讲,它非常有用,因为它允许非常细粒度的权限规范。这对您和您的客户都有好处(理论上,这会使利用安全漏洞变得更加困难——即使攻击者完全控制了您的应用程序,他仍然被锁定在CAS沙盒中),因为他们可以确切地看到您的应用程序可以做什么,并运行自己的安全审计。
在实际应用中,它基本上没有意义。我认为它太复杂了,可用的开发工具支持的太少,而且大多数用户根本不在乎。
当然也有例外(真正了解.net/cas的政府和客户),我想说cas是绝对有用和强制的,但现实中讲的是一种明确的语言。
读者注意:请看下面的两条评论;听起来我无意中把cas的定义膨胀为(错误地)include rbs。我把答案留在这里供参考,但要注意区别。
对cas有两个破坏;在那次考试中,您将看到的最多的是代码调用其他代码的所有细微差别,这可能对部分信任有用,但大多数时候这只是一个痛苦——更糟的是:如果您的代码完全信任(大多数/太多的信任),那么实际上没有一个代码执行(它完全被跳过)。
casrbs的有用部分是principal permission,它被使用;当然,您的用户界面应该验证对功能的访问,但是您可以放置(在您的低端逻辑中):
1 2 | [PrincipalPermission(SecurityAction.Demand, Role ="ADMIN")] static void DeleteOrder(int id) { ... } |
这将在完全信任的情况下强制执行;您可以通过实现
您也可以使用它来驱动您的用户界面。我确实有一篇usenet文章,它基于主体启用/禁用了winforms控件(使用运行时属性指定每个控件的角色,有点像
我是一个获得基于.NET解决方案的JITC认证(美国国防部)项目的开发负责人,在认证测试期间,对CAS设置进行了严格审查。
与大多数其他认证要求一样,代码只能使用工作所需的特权,不能再使用了。
如果你计划获得安全认证,CA肯定是很重要的。
要了解代码访问安全性,除了了解它是如何使用的以及您可能调用的API的权限级别之外,它对应用程序开发人员几乎没有用处。唯一的例外是,我发现真正有用的是一个名为PrincipalPermission的CA,如果没有为当前主体定义正确的角色,它基本上不允许执行某些代码。在上面看到这篇文章:
http://www.coderjournal.com/2008/03/securing-mvc-controller-actions/
真正需要关注CA以及如何在其应用程序中实现CA的开发人员是框架和代码库开发人员。因为您需要一定程度的信任才能使应用程序工作,特别是在处理非托管资源(如文件、网络流、串行端口等)或为该非托管资源(如特定服务器)创建代码或对程序集进行任何类型的低级访问时,您需要这种信任。您将希望在它周围创建一些代码访问安全性,这样人们就不会被允许执行一些被严格拒绝的操作。
微软在解释如何在日常应用程序中使用CA这一问题上做得不好,这并没有帮助。所以这才是缺乏使用的真正原因。然而,CA是.NET如此安全的语言的众多原因之一,并且比其竞争对手遭受的问题少得多。
虽然我从未使用过它,但我对CAS的理解是它还可以用于扩展面向对象的设计机制。例如,假设您正在为必须实现数据库访问和缓存的银行开发大型数据访问包。即使它们是同一部署包的一部分,考虑到项目的假设大小,逻辑也应该在单独的程序集中实现,因为它们是完全不同的问题集,取决于不同的外部力量(数据库基础设施与消费者使用)。
但是,缓存代码可能需要访问数据访问程序集中的某些敏感类或方法,而整个包的使用者不应该访问这些敏感类或方法。因此,这些数据访问类和方法不能简单地是
您应该知道的一件事是,代码访问安全性和防篡改的方法差不多都被破坏了。见:
CAS Tamper-Proofing is Broken: Consequences for Software Licensing
...
Code Access Security can no longer be relied upon to prevent the use of tampered assemblies in shipped products. This means that if your application is dependent upon Code Access Security to perform licensing checks, it is trivial for an attacker to replace your licensing assembly with another, thereby gaining free access to your application.
...
号
我们在应用程序中使用CA并不是很困难,因为我们只是试图阻止未经授权的代码执行。有一次,我们从本地网络共享中使用我们的软件时出现了问题,但CAS策略解决了这个问题。
自从.net3.5更新后,我们的问题就不再存在了,因为局域网上的代码现在像本地代码一样处理。