当前位置:  开发笔记 > 编程语言 > 正文

任何现实世界都使用"代码访问安全性"吗?

如何解决《任何现实世界都使用"代码访问安全性"吗?》经验,为你挑选了3个好方法。

我经常在"现实世界"中遇到代码访问安全性,通常是在我最不期望的时候.在某种程度上,SilverLight将是一个非常好的现实世界应用程序,如果不是SilverLight 最终选择不使用CAS.

托管服务提供商

您在其中看到它的位置是需要安全环境的地方:当然,ASP.NET本身,但ASP.NET托管提供商使用修改后的安全模型来防止其宝贵系统的入侵.我知道Webhost4Life使用了这个(在他们的网站上没有关于它的信息,但我和他们一起工作,它确实存在).进一步看,其他ASP.NET托管服务提供商也这样做,但他们也不是很清楚:godaddy.com上的线程不想改变CAS(并且不清楚支持什么和不支持)或者这个相关的讨论1&1.一些云托管站点(rackspacecloud)更进一步,并"与Microsoft一起工作,修改了完全信任级别",无论可能是什么.

简而言之:如果您找到一个ASP.NET主机,很可能他们使用CAS来阻止您做他们不希望您做的事情.他们甚至可以使用它来区分"基本"(许多限制)托管和"企业"(少数限制)托管,这给CAS带来了另外一个意义.

CAS的其他应用

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

NAR Loader(代码项目应用程序)使用它自己的CAS

LR Evaluator(也是codeproject app)使用CAS

ClickOnce(见下文)使用CAS

CAS设计模式:它的受欢迎程度"假设"正在使用CAS

了解CAS:更受欢迎,一些评论意味着应用程序

Microsoft SharePoint一直使用CAS,似乎(对不起,我不是SP专家)

对于您自己完全控制的任何情况,您构建自己的应用程序和代码(或构建它)并完全控制您的系统,我认为您不会经常需要CAS.当您从较不受信任的来源运行代码时,您可以使用更多内容(基本上所有内容都不在您的完全控制之下).

CAS与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中CAS作为BitFrost的部分和调查部分.
更新:添加CAS与ClickOnce部分
更新:使用CAS添加资源列表(并连续为所有这些更新道歉!)



1> Abel..:

我经常在"现实世界"中遇到代码访问安全性,通常是在我最不期望的时候.在某种程度上,SilverLight将是一个非常好的现实世界应用程序,如果不是SilverLight 最终选择不使用CAS.

托管服务提供商

您在其中看到它的位置是需要安全环境的地方:当然,ASP.NET本身,但ASP.NET托管提供商使用修改后的安全模型来防止其宝贵系统的入侵.我知道Webhost4Life使用了这个(在他们的网站上没有关于它的信息,但我和他们一起工作,它确实存在).进一步看,其他ASP.NET托管服务提供商也这样做,但他们也不是很清楚:godaddy.com上的线程不想改变CAS(并且不清楚支持什么和不支持)或者这个相关的讨论1&1.一些云托管站点(rackspacecloud)更进一步,并"与Microsoft一起工作,修改了完全信任级别",无论可能是什么.

简而言之:如果您找到一个ASP.NET主机,很可能他们使用CAS来阻止您做他们不希望您做的事情.他们甚至可以使用它来区分"基本"(许多限制)托管和"企业"(少数限制)托管,这给CAS带来了另外一个意义.

CAS的其他应用

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

NAR Loader(代码项目应用程序)使用它自己的CAS

LR Evaluator(也是codeproject app)使用CAS

ClickOnce(见下文)使用CAS

CAS设计模式:它的受欢迎程度"假设"正在使用CAS

了解CAS:更受欢迎,一些评论意味着应用程序

Microsoft SharePoint一直使用CAS,似乎(对不起,我不是SP专家)

对于您自己完全控制的任何情况,您构建自己的应用程序和代码(或构建它)并完全控制您的系统,我认为您不会经常需要CAS.当您从较不受信任的来源运行代码时,您可以使用更多内容(基本上所有内容都不在您的完全控制之下).

CAS与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中CAS作为BitFrost的部分和调查部分.
更新:添加CAS与ClickOnce部分
更新:使用CAS添加资源列表(并连续为所有这些更新道歉!)



2> Michael Stum..:

从技术上讲,它非常有用,因为它允许非常精细的权限规范.这对你有好处(理论上它会使得利用安全漏洞变得更加困难 - 即使攻击者完全控制你的应用程序,他仍然被锁定在CAS沙箱中)和你的客户(因为他们可以确切地看到你的应用程序可以执行并运行自己的安全审核).

在实际使用中,它几乎毫无意义.我认为它太复杂了,可用的开发工具支持的太少,大多数用户都不关心.

当然也有例外(政府和客户真正了解.net/CAS),我很乐意说CAS绝对有用且强制性,但现实中说的是一种清晰的语言.



3> Marc Gravell..:

读者注意:见下面的两条评论; 听起来我不小心将CAS的定义夸大到(错误地)包括RBS.我会在这里留下答案供参考,但要注意区别.


CAS有两个小问题; 你在考试中看到的最重要的是代码调用其他代码的所有细微差别,这可能对部分信任有用,但大多数时候它只是一种痛苦 - 更糟糕的是:如果你的代码完全信任(其中大部分/太多都没有实际执行(它完全被跳过).

有用的部分CAS RBS是主体权限,其使用; 当然,您的UI应该验证对功能的访问权限,但是您可以(在您的低位逻辑中):

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

这将在完全信任的情况下得到执行; 您可以通过实现IPrincipal(查看IsInRole())来定义自己的主体(与用户绑定).由于大多数环境(winforms,webforms,mvc,wcf等)都支持主体,因此可以非常灵活地在业务层重复检查安全性,而无需引用特定的安全模型.请注意,上述检查适用于任何环境.

您也可以使用它来驱动您的UI.我确实有一个usenet帖子,启用/禁用基于主体的winforms控件(使用运行时属性来指定每个控件的角色,有点像ToolTip等) - 虽然我不能找到它(编辑:也许这一个)).


AFAIK,PrincipalPermission不属于CAS,而是属于基于角色的安全性.CAS将信任确定置于站点管理员手中.RBS将信任决定权交给开发者.巨大的根本区别.
推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有