我最近加入了一家公司,在分析他们的环境时,我注意到 SharePoint web.config 的信任级别设置为完全。我知道这绝对是一种糟糕的做法,并希望 stackoverflow 社区可以帮助我概述这个决定中的缺陷。
哦,看来这个决定是为了允许开发人员在不创建 CAS 策略的情况下将 dll 部署到 Bin 文件夹。叹。
只是想澄清一下,让事情变得更糟,我们也在为这个 Web 应用程序部署第三方代码。
我最近加入了一家公司,在分析他们的环境时,我注意到 SharePoint web.config 的信任级别设置为完全。我知道这绝对是一种糟糕的做法,并希望 stackoverflow 社区可以帮助我概述这个决定中的缺陷。
哦,看来这个决定是为了允许开发人员在不创建 CAS 策略的情况下将 dll 部署到 Bin 文件夹。叹。
只是想澄清一下,让事情变得更糟,我们也在为这个 Web 应用程序部署第三方代码。
托德,
Dino Espisito所著的《Programming Microsoft ASP.Net 3.5》一书为不允许在 ASP.Net 应用程序中完全信任提供了一些合理的理由。
除其他原因外,Dino 表示暴露于互联网的 Web 应用程序是“您可以想象的对计算机安全最不利的环境之一”。和:
公开暴露的完全受信任的应用程序是黑客发动攻击的潜在平台。应用程序的可信度越低,该应用程序就越安全。
我很惊讶 StackOverflow 社区没有更好地概述完全信任的问题。我希望同样的事情,所以我不必去翻阅我的一堆书来寻找答案,懒惰的我。
如果他们无视 CAS 政策,那么让他们回拨可能很难,因为这会使他们的工作变得更加困难(或者,至少不那么宽容)。改变安全实践总是很困难的——比如当我不得不说服我的老板在我们的 Web 应用程序的 SQL 连接字符串中使用 SA 帐户是一个坏主意时——但坚持下去。
完全信任允许应用程序升级以控制计算机上的任何资源。虽然您的应用程序中必须存在安全漏洞才能允许这些,并且他们可能会声称他们已经通过精明的编程阻止了任何升级,但请提醒他们,如果发生某些事情,他们不是宁愿Web 应用程序无法控制整个计算机?我的意思是,以防万一?
编辑:我在这里对我的语言有点过分热心。完全信任将允许应用程序控制它想要的任何东西,但前提是应用程序池进程具有足够的权限来执行此操作。因此,如果您以受限用户的身份运行,除了应用程序需要之外,在服务器上没有任何权限,那么我认为“完全信任”基本上没有风险。现实情况是,应用程序池所有者很可能拥有许多您不希望您的应用程序拥有的权利(在某些情况下,很多很多),因此限制应用程序安全性并单独授予额外的权利需求要安全得多到应用程序。谢谢你的纠正,巴里。
缺陷?许多。但最糟糕的是直接来自 CAS 实用程序:
“......它允许完全访问您计算机的资源,例如文件系统或网络访问,可能在安全系统的控制之外运行。”
这意味着,获得完全信任的代码可以在系统上执行任何其他代码(托管或其他),可以通过网络调用任何机器,可以在文件系统中执行任何操作(包括更改受限文件的权限 - 甚至是操作系统文件)。
大多数网络程序员会说“这不是问题,只是我的代码”,这很好......直到他们的代码中出现安全漏洞,允许攻击者使用它来做令人讨厌的事情。然后,先前授予的完全信任变得非常不幸。
老实说,我发现 sharepoint 过于严格。
请查看以下页面,了解基于信任级别可以做什么和不可以做什么 http://msdn.microsoft.com/en-us/library/ms916855.aspx
我立即遇到的一个问题是我无法使用缓存应用程序块。我们使用这个应用程序块而不是 ASP.NET 缓存,因为我们使用了 MVP 模式并且可能会打开一个 win forms 应用程序。
另一个问题是没有反射,这导致 About 页面失败,因为版本号是从程序集的元数据中提取的。
我认为最好的解决方案是不使用 Sharepoint 作为应用程序主机。如果编码量太小以至于不会影响信任级别,我只会将 Sharepoint 用作应用程序主机,并且与设置新应用程序相比,它的工作量会更少。如果您正在执行某种类型的编码,它开始触及信任级别的障碍,请将您的应用程序移动到适当的 ASP.NET 环境中。但这只是我,我有偏见。也许您应该尝试以中等信任级别妥协为目标。
我在我的开发机器上使用完全信任......所以我可以在构建新代码时部署到 BIN。我相信我自己的代码并在 GAC 中运行它,因为创建 CAS 策略很痛苦。
第三方的事情会让我担心..但是:
大多数在网络上找到的第 3 方解决方案也部署到 GAC(假设出于相同的原因)。无论信任级别如何,这都会赋予他们所有权利。感觉这与您是否信任第 3 方有关。您真的信任自己的开发人员吗?
黑客会做什么?黑客在您的 BIN 文件夹中放置一个邪恶的 dll 的情况我认为不太现实。无论他是否可以这样做,他也可能会更改信任级别。