2009-01-20 59 views
5

我最近加入了一家公司,在分析他们的环境时,我发现SharePoint web.config的信任级别设置为“完整”。我知道这是一个非常糟糕的做法,希望stackoverflow社区能帮我概述这个决定的缺陷。ASP.NET - 信任级别=完整?

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

只是想澄清和使事情变得更糟,我们也在此Web应用程序中部署第三方代码。

回答

1

瑕疵?许多。但是最令人沮丧的是直接用CAS工具:

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

这意味着,授予Full Trust的代码可以在系统上执行任何其他代码段(托管或其他),可以通过网络调用任何机器,可以在文件系统中执行任何操作(包括更改受限制文件的权限 - 甚至OS文件)。

大多数网络程序员都会说“这不是问题,它只是我的代码”,这很好....直到他们的代码中出现安全缺陷,允许攻击者使用它来做不好的事情。之前授予的Full Trust变得相当不幸。

+7

不要将.NET的代码安全概念Full Trust与Windows授权混淆。设置完全信任不会授予ASP.NET工作进程帐户的任何新权限。 Windows仍将例如根据DACL等限制对文件系统的访问权限。 – 2009-01-20 15:15:48

+0

诚然,但Full Trust具有足够高的Windows凭据的程序集(由于CAS策略不严格,如果我正在审阅此应用程序,这是我首先要查找的内容....)可以简单地开始改变DACL。 – TheSmurf 2009-01-20 15:25:14

+2

呃...没有。你认为例如来宾帐户可以简单地修改OS文件的权限并开始随机写入? iusr账户在实践中遇到过问题吗? – 2009-01-20 22:13:41

2

如果他们忽略了CAS的政策,那么让他们回拨它可能是一种艰难的销售,因为这会让他们的工作变得更难一些(或者至少会减少一些宽容)。改变安全实践总是很艰难 - 就像当我不得不说服我的老板一样,在我们的Web应用程序的SQL连接字符串中使用SA帐户是一个坏主意 - 但却在那里。

Full Trust允许应用程序升级以控制计算机上的任何资源。虽然你的应用程序必须有安全缺陷才能允许这些安全漏洞,但他们可能会声称他们已经通过精确的编程阻止了任何升级,提醒他们在发生某些事情的情况下,他们是不是会网络应用程序没有控制整台电脑?我的意思是,以防万一?

编辑:我在这里用我的语言有点过分热情。完全信任将允许应用程序控制任何它想要的,但只有当应用程序池进程有足够的权利来执行它。因此,如果您作为受限用户运行,除了应用程序需要的服务器上没有权限,那么我认为“完全信任”基本上没有风险。实际情况是,应用程序池所有者很可能拥有一些您不希望自己的应用程序拥有的权利(在某些情况下,还有更多),因此限制应用程序安全性并单独授予其他权利需求会更安全到应用程序。谢谢你的更正,巴里。

1

我诚实地发现sharepoint限制太多。

看看下面的页面,看看有什么可以和不能基于信任级别做 http://msdn.microsoft.com/en-us/library/ms916855.aspx

一个问题,我跑进立刻被我不能使用缓存应用程序块。我们使用这个应用程序块而不是ASP.NET缓存,因为我们使用了MVP模式,并且可能会打开一个win窗体应用程序。

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

我认为最好的解决方案是不使用Sharepoint作为应用程序主机。如果编码量太小以至于不会影响信任级别,那么我只会将Sharepoint用作应用程序主机,并且在设置新应用程序时工作量会减少。如果您正在进行某种类型的编码,并开始触及信任级别的壁垒,请将您的应用程序移至适当的ASP.NET环境中。但那只是我,我有偏见。也许你应该尝试瞄准中等信任级别的妥协。

4

托德,

这本书,“Programming Microsoft ASP.Net 3.5”,由迪诺Espisito规定不允许完全信任在ASP.Net应用程序的一些声音的推理。

除了其他原因,迪诺声称暴露在互联网上的网络应用程序是“你可以想象到的计算机安全最恶劣的环境之一”。和:

一个公开曝光完全信任 应用程序是一个潜在的平台 黑客发动攻击。 应用程序是可信的, 更安全,应用程序发生 。

我很惊讶的是,StackOverflow社区没有更好地概述Full Trust的问题。我希望得到同样的东西,所以我不必为了找到答案而去挖掘我的一堆书,懒惰的我。

1

我在开发机器上使用完全信任..所以我可以在构建新代码时部署到BIN。 我相信我自己的代码,并在GAC中对其进行生产,因为创建CAS策略是一种痛苦。

第三方的事情要我担心。但是:在网络上找到

大多数第三方解决方案也部署到GAC(假定出于同样的原因)。这给了他们所有的权利,不管信任级别如何。 如果你信任第三方,感觉它更像是一个事情......你真的相信自己的开发者吗?

黑客会做什么? 黑客在您的BIN文件夹中放入恶意DLL的情况我认为不太现实..不管他是否可以这样做,他也可能会改变信任级别。