ASP.NET-信任级别=完全?

ASP.NET-信任级别=完全?,asp.net,security,sharepoint,web-config,cas,Asp.net,Security,Sharepoint,Web Config,Cas,我最近加入了一家公司,在分析他们的环境时,我注意到SharePoint web.config的信任级别设置为Full。我知道这是一个非常糟糕的做法,我希望stackoverflow社区能帮助我找出这个决定中的缺陷 哦,看来这个决定是为了允许开发人员在不创建CAS策略的情况下将DLL部署到Bin文件夹。唉 只是想澄清一下,让事情变得更糟,我们还将第三方代码部署到此web应用程序。缺陷?许多的但最要命的事情是直接从CAS实用程序: “…它允许完全访问您计算机的资源,如文件系统或网络访问,可能在安全系

我最近加入了一家公司,在分析他们的环境时,我注意到SharePoint web.config的信任级别设置为Full。我知道这是一个非常糟糕的做法,我希望stackoverflow社区能帮助我找出这个决定中的缺陷

哦,看来这个决定是为了允许开发人员在不创建CAS策略的情况下将DLL部署到Bin文件夹。唉


只是想澄清一下,让事情变得更糟,我们还将第三方代码部署到此web应用程序。

缺陷?许多的但最要命的事情是直接从CAS实用程序:

“…它允许完全访问您计算机的资源,如文件系统或网络访问,可能在安全系统控制之外运行。”

这意味着,被授予完全信任的代码可以在系统上执行任何其他代码(托管或其他),可以通过网络调用任何计算机,可以在文件系统中执行任何操作(包括更改受限制文件的权限,甚至是操作系统文件)


大多数网络程序员会说“这不是问题,这只是我的代码”,这很好。。。。直到他们的代码中出现一个安全漏洞,允许攻击者使用它做不光彩的事情。然后,以前授予的完全信任变得非常不幸。

如果他们忽略了CAS策略,让他们回拨可能会很困难,因为这会让他们的工作变得更困难(或者至少不那么宽容)。改变安全实践总是很困难的——就像我不得不说服我的老板在我们的web应用程序的SQL连接字符串中使用SA帐户是个坏主意一样——但要坚持下去


完全信任允许应用程序升级以控制计算机上的任何资源。虽然您的应用程序中必须存在安全缺陷才能允许这些,而且他们可能会声称他们通过精明的编程阻止了任何升级,但提醒他们,万一发生了什么事情,他们难道不希望web应用程序无法控制整台计算机吗?我是说,以防万一


编辑:我对这里的语言有点过分热情。完全信任将允许应用程序控制它想要的任何东西,但前提是应用程序池进程有足够的权限来控制它。因此,如果您是以受限用户的身份运行的,除了应用程序需要的以外,您在服务器上没有任何权限,那么我认为“完全信任”基本上没有风险。现实情况是,应用程序池所有者很可能拥有许多您不希望您的应用程序拥有的权利(在某些情况下,还有很多,更多),因此限制应用程序安全性并单独向应用程序授予额外的权利需要要安全得多。谢谢你的更正,巴里。

我真的发现sharepoint限制太多了

查看下一页,了解基于信任级别可以做什么和不能做什么

我立即遇到的一个问题是我无法使用缓存应用程序块。我们使用此应用程序块而不是ASP.NET缓存,因为我们使用了MVP模式,可能会打开win forms应用程序

另一个问题是无反射,这导致About页面失败,因为版本号是从程序集的元数据中提取的

我认为最好的解决方案是不使用Sharepoint作为应用程序主机。我只会将Sharepoint用作应用程序主机,前提是编码量非常小,不会影响信任级别,而且与设置新应用程序相比工作量更少。如果您正在进行某种类型的编码,而这种编码正开始触及信任级别的障碍,请将您的应用程序移动到适当的ASP.NET环境中。但那只是我,我有偏见。也许你应该尝试达成一个中等信任级别的妥协

托德

迪诺·埃斯皮斯托(Dino Espisito)的书《不允许完全信任ASP.Net应用程序》提供了一些合理的理由

除其他原因外,Dino指出,暴露在互联网上的web应用程序是“你能想象到的对计算机安全最不利的环境之一”。并且:

公开披露的、完全可信的信息 应用程序是一个潜在的平台 让黑客发动攻击。这个 应用程序受信任程度越低,则 使应用程序更加安全 是的


我很惊讶StackOverflow社区没有以完全信任的方式更好地描述这个问题。我也希望得到同样的结果,所以我不必去翻我那堆书来找到答案,懒惰的我。

我完全信任我的开发机器。。因此,我可以在构建新代码时部署到BIN。 我相信我自己的代码,并在GAC的生产环境中运行它,因为创建CAS策略是一件痛苦的事情

第三方的事情会让我担心。。然而:

在web上找到的大多数第三方解决方案也部署到GAC(假设出于相同的原因)。这将为他们提供所有权限,而不考虑信任级别。 感觉这与你是否信任第三方有很大关系。。你真的信任你自己的开发者吗

黑客会怎么做?
我认为黑客在你的BIN文件夹中放置一个邪恶的dll的场景不太现实。。不管他能否做到这一点,他也可能改变信任级别。

不要混淆.NET的完全信任与Windows授权的代码安全概念。设置完全信任不会向ASP.NET工作进程的帐户授予任何新权限。Windows仍然会根据DACL等限制对文件系统的访问权限。确实如此,但是完全信任具有足够高Windows凭据的程序集(考虑到宽松的CAS策略,如果我正在查看此应用程序,这是我要寻找的第一件事…)也可以开始更改DACL。呃。。。否。您是否认为,例如,来宾帐户可以简单地修改操作系统文件的权限并开始随机写入?你在实践中遇到过问题吗