Warning:

自从提出这个问题以来,.Net和.Net Core的较新版本已经删除和/或更改了"代码访问安全"(CAS).

Original Question:

我正在为70-536 .NET Framework - Application Development Foundation Exam人学习,因为我一直在编程.net多年来,这应该不难!

然而,我必须学习"代码访问安全性"(CAS),因为我从来没有使用或配置它的需要,我想知道是否有其他人找到了它的实际使用方法?

请举例说明您何时使用了CAS,它是解决方案的一部分,而不是问题的一部分.

(到目前为止,其他一切都与我在.NET编程生涯中必须完成的任务有关)


Related questions:


Results so far.

  • CAS在托管第三方代码时非常有用.例如,网络托管公司可以使用它来阻止客户的Asp.net代码对服务器造成损害.(当.NET被用作VBA的替代品时,Office也可以使用它)

  • 迄今为止,在Microsoft应用程序之外使用它的唯一详细示例是:

    我最近做的一个项目

  • CAS似乎有助于获得JITDC认证,就像美国国防部那样,但我不知道CAS是否有任何真正的价值,或者它是否只是在打勾.

(如果您需要绕过使用CAS的主机,并且您对这些主机拥有管理权限,您可以将程序集放入GAC.)

展望future ,CAS is a bit less complex in .net 4.


至少看起来新的微软考试不会有包括CAS在内的"基础"考试.我不知道它是否能进入新的Winforms/WPF考试.

推荐答案

在"现实世界"中,我经常遇到代码访问安全问题,通常是在我最意想不到的时候.在某种程度上,SilverLight将是一个出色的现实应用,如果它最终不是SilverLight chose not to employ CAS的话.

托管Provider

在您看到它发挥作用的地方,需要一个安全的环境:ASP.NET本身,但ASP.网络托管Provider 使用a modified security model来防止对其宝贵系统的入侵.我知道Webhost4Life使用这个(他们的网站上没有关于它的信息,但我和他们一起工作过,它就在那里,真的).进一步来看,其他ASP.网络托管Provider 也这么做,但他们也不是很清楚:thread on godaddy.com not家想要更改CA(不清楚支持什么和不支持什么),或者this related discussion on 1&1家.一些云托管网站(rackspacecloud)更进一步,不管是什么.

简而言之:如果你找到一个ASP.NET主机,很可能他们使用CAS阻止你做他们不想让你做的事情.他们甚至可以使用它来区分"基本"(许多限制)托管和"企业"(很少限制)托管,这赋予了CAS一个完全不同的含义.

CAS的其他应用

对于我自己遇到的一些现实情况来说,就这么多了.我最近做的一个项目也有类似的功能:允许用户上传一个库,并测试它的性能("谁做了最好的算法").不用说,我们在那里非常需要CAS.其他示例或有趣的资源:

在任何情况下,只要你完全控制自己,构建自己的应用程序和代码(或让他人构建),并完全控制自己的系统,我认为你不会太经常需要CAS.更重要的是,当你运行来自不太可信的源代码时(基本上是所有不在你完全控制范围内的东西),你会使用它.

CAS vs ClickOnce

默认CAS设置会限制从网络共享或其他非本地源运行的代码的功能.这是有道理的,但严格的限制使分布式应用程序很难有一个中央存储库.NET2.0引入了ClickOnce,它本应提高安全性(discussion here).

单击Once本身uses CAS,以防止安装程序调用系统功能.因此,我认为这可以说是the best well known application that relies on CAS.

要点是:您需要了解CAS才能创建可以直接从共享运行的内容,否则您可以将其全部忽略而使用ClickOnce.

微软对中国科学院的调查

2005年,微软summoned a survey试图找出为什么CAS如此不受欢迎,希望对其进行改进,使其更好地适用.不幸的是,我找不到实际的调查结果,也找不到为什么CAS未被充分利用的原因.

在另一个世界

然而,这篇文章确实指出了一个有趣的领域:CAS应用于另一个世界:Unix/Linux.他们不叫它CAS,而是BitFrost.对于一个现实世界的应用程序:"One Laptop Per Child" project,它依赖BitFrost作为传统Unix安全模型的替代品.

Update: section on CAS in Unix/Linux as BitFrost and section on survey.
Update: added CAS vs ClickOnce section
Update: added list of resources using CAS (and apologies for all these updates in a row!)

.net相关问答推荐

在计算Total毫秒时,.NET TimeSpan类中是否存在错误?

dotnet 8 web api在部署到docker后无法工作

在PowerShell中,XML子对象和属性是对象属性.它怎麽工作?

NETSDK1083:无法识别指定的 RuntimeIdentifierwin10-x64

在 Inno Setup 中判断给定服务的依赖服务

判断内部异常的最佳方法?

是否有任何为 C# 编写的模糊搜索或字符串相似函数库?

.NET 中的线程安全集合

JavaScript 中的IsNullOrWhitespace?

图像与位图类

大型 WCF Web 服务请求因 (400) HTTP 错误请求而失败

为什么 .NET 中不需要 Maven?

如何将 System.Type 转换为其可为空的版本?

场与财产.性能优化

WebClient.DownloadString 由于编码问题导致字符损坏,但浏览器正常

C# 相当于 Java 的 Exception.printStackTrace()?

SqlCommand.CommandTimeout 和 SqlConnection.ConnectionTimeout 有什么区别?

当它被抛出和捕获时,不要在那个异常处停止调试器

在foreach循环中修改列表的最佳方法是什么?

SqlParameter 已被另一个 SqlParameterCollection 包含 - using() {} 作弊吗?