【问题标题】:ASP.NET - Trust Level = Full?ASP.NET - 信任级别 = 完整?
【发布时间】:2009-01-20 15:00:59
【问题描述】:

我最近加入了一家公司,在分析他们的环境时,我注意到 SharePoint web.config 的信任级别设置为完全。我知道这绝对是一种糟糕的做法,并希望 stackoverflow 社区可以帮助我概述这个决定中的缺陷。

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

只是想澄清一下,让事情变得更糟,我们还在为这个 Web 应用程序部署第三方代码。

【问题讨论】:

    标签: asp.net security sharepoint web-config cas


    【解决方案1】:

    托德,

    Dino Espisito 的书“Programming Microsoft ASP.Net 3.5”为不允许在 ASP.Net 应用程序中完全信任提供了一些合理的理由。

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

    公开的完全受信任的 应用程序是一个潜在的平台 为黑客发起攻击。这 应用程序可信度越低, 更安全的应用程序发生 成为。

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

    【讨论】:

    • 不仅仅是 SO 社区。普遍缺乏对 FullTrust 问题的“担忧”(而且非常令人沮丧)
    【解决方案2】:

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

    完全信任允许应用程序升级以控制计算机上的任何资源。虽然您必须在应用程序中存在安全漏洞才能允许这些,并且他们可能会声称他们已经通过精明的编程阻止了任何升级,但请提醒他们,如果发生某些事情,他们不是宁愿Web 应用程序无法控制整个计算机?我的意思是,以防万一?

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

    【讨论】:

    • “升级以控制任何资源”是太强硬的语言。完全信任代码安全性独立于 Windows 安全性并服从于 Windows 安全性。 ASP.NET 工作进程的权限仅限于拥有该进程的用户。完全信任不能也不会在这里授予额外的权利。
    【解决方案3】:

    缺陷?许多。但最该死的是直接来自 CAS 实用程序:

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

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

    大多数网络程序员会说“这不是问题,只是我的代码”,这很好......直到他们的代码中出现安全漏洞,允许攻击者使用它来做令人讨厌的事情。那么之前授予的完全信任就变得非常不幸了。

    【讨论】:

    • 不要将 .NET 的完全信任的代码安全概念与 Windows 授权相混淆。设置完全信任不会向 ASP.NET 工作进程的帐户授予任何新权限。 Windows 仍然会根据 DACL 等限制对文件系统的访问权限。
    • 是的,但是使用完全信任的程序集具有足够高的 Windows 凭据(考虑到宽松的 CAS 政策,如果我正在审查这个应用程序,这是我首先要寻找的东西......)也只需开始更改 DACL。
    • 呃……不。你认为吗?来宾帐户可以简单地修改操作系统文件的权限并开始随机写入吗?您在使用 iusr 帐户时遇到过问题吗?
    • 不是个人,但我不是在谈论访客帐户。考虑到他们对安全性的懒惰,我首先假设 ASP.NET 帐户也在操作系统中以提升的权限运行。当然,这不包括升级攻击,这也是一种现实的可能性。
    【解决方案4】:

    老实说,我发现 sharepoint 限制太多。

    查看以下页面,了解根据信任级别可以做什么和不可以做什么 http://msdn.microsoft.com/en-us/library/ms916855.aspx

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

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

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

    【讨论】:

    • 如果您再次使用 SharePoint,可以在 Web 应用程序的 web.config 中更改 SharePoint 的默认信任级别。默认就是这样,一个默认。
    • 有时在与拥有大型 Sharepoint 场的大型组织合作时,他们会有自己的策略来防止对默认值进行任何更改。造成这种情况的典型原因是他们正在运行如此多的实例,他们希望以相同的方式配置所有内容并尽可能少地进行设置。因此,更改默认值并不总是一种选择。
    【解决方案5】:

    我在我的开发机器上使用完全信任。所以我可以在构建新代码时部署到 BIN。 我相信我自己的代码并在 GAC 中运行它,因为创建 CAS 策略很痛苦。

    第三方的事情会让我担心..但是:

    在网络上找到的大多数第 3 方解决方案也部署到 GAC(假设出于相同的原因)。无论信任级别如何,这都会赋予他们所有权利。 感觉这与您是否信任第 3 方有关。您真的信任自己的开发人员吗?

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-17
      • 1970-01-01
      • 1970-01-01
      • 2014-10-30
      • 2011-03-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多