尝试为 Medium Trust 开发是不是会失败?
Posted
技术标签:
【中文标题】尝试为 Medium Trust 开发是不是会失败?【英文标题】:Is trying to develop for Medium Trust a lost cause?尝试为 Medium Trust 开发是否会失败? 【发布时间】:2013-05-26 19:59:53 【问题描述】:我开始使用实体框架代码优先和 Unity 来开发新的 MVC 应用程序以进行依赖注入。我使用了 EF5 和 Unity,因为我认为它们应该在 Medium Trust 中工作。但是,当我在web.config
中添加<trust level="Medium" />
标记时,我开始收到反射权限异常。
似乎每当我超出使用诸如System.Data.SqlClient
ADO.net 之类的内置内容时,我总是在 Medium Trust 中遇到问题。自动映射器:失败。 NHibernate:失败。 mysql:失败。 EF5 代码优先:失败。国际奥委会:失败。
我只是在追逐白日梦吗?是否有可能使用现代技术实现一个架构良好且可测试的 Web 应用程序,该应用程序将以中等信任度运行?
在虚拟机/虚拟服务器/云计算时代(甚至一些共享主机会将您的应用程序池设置为完全信任),有没有人发现为中等信任进行开发值得付出努力?
【问题讨论】:
【参考方案1】:ASP.NET 团队的官方立场是 Medium Trust 已过时。这意味着几件事:
我们会自动解决所有报告给我们的“无法修复”的中等信任相关错误。 我们已向托管商提供了指导,他们应该从 Medium Trust 迁移并改用适当的操作系统级隔离 (http://support.microsoft.com/kb/2698981)。 我们正在从我们开发的框架(MVC、WebAPI、SignalR 等)中移除对中等信任的支持。展望未来,基于这些框架构建的应用程序将需要完全信任。在此,上述术语“中信任”是指 ASP.NET 中的所有非完全信任配置,包括使用内置信任级别(最小、低、中、高)或任何自定义信任级别。
2015 年 5 月 26 日编辑: .NET Framework 作为一个整体已弃用部分信任,建议客户不要依赖它作为安全边界。 From MSDN:
.NET Framework 中的代码访问安全性不应用作 部分可信代码的安全边界,尤其是 来历不明。我们建议不要加载和执行以下代码 来源不明而未采取替代安全措施 地点。
【讨论】:
你能添加一个链接到说明这个官方立场的文章吗? 史蒂文:support.microsoft.com/kb/2698981 是主要文章。还有一些其他的,例如asp.net/aspnet/overview/web-development-best-practices/…。 我知道这已经晚了,但谢谢你,这清楚了很多。即使是在 2018 年,这仍然非常重要。我发现有很多服务器托管提供商仍然强制实施部分信任(至少在小型项目的共享服务器上)。我一直在寻找提供商,到目前为止,我已经尝试了四家不同的公司,所有这些公司都强制要求对其服务器上的所有应用程序进行“中等”信任。当然,根据您的文章和问题,使用较新版本的 ASP.NET 构建的项目甚至不编译部分权限。至少可以这么说,这可能很烦人【参考方案2】:一般来说,所有需要深度反射的东西都不能在 Medium Trust 上运行
在你的情况下:
Automapper:使用反射来发现匹配的属性和内存流来克隆它们(有一个版本实际上可以在中等信任下工作,但有一些限制)
NHibernate:使用反射发射来允许延迟加载,因为 NH 中的延迟加载是由代理实现的(为避免这种情况,您可以禁用延迟加载或使用 NHibernate ProxyGenerator,它是一个有助于预先创建代理的实用程序)
Nhibernate ProxyGenerator
EF:实际上我没有发现 EF 和 Medium Trust 的大问题....不要序列化具有关联或集合的对象
IoC:IoC 是反射的杀手级应用 :) 您可以尝试在 Medium Trust 上运行的 AutoFac
AutoFac
一般来说,中等信任度是一个很大的限制……但这完全取决于您从事的项目类型。 还可以考虑使用像 Arvixe 这样的完全信任托管
希望对你有帮助
【讨论】:
感谢您的回复。在 EF5 中,您可以通过将所有属性上的公共 getter 和 setter 持久化到数据库来解决 MT 问题。问题是您不希望用户能够设置某些属性。据说这已在 EF6 中得到修复。 Unity 似乎也适用于 Medium Trust。我想最后我想知道为 Medium Trust 开发是否值得所有努力?有没有人通过开发在共享主机上运行的网络应用程序来赚钱?如果客户使用廉价托管,他们愿意为您的应用付费的可能性有多大?以上是关于尝试为 Medium Trust 开发是不是会失败?的主要内容,如果未能解决你的问题,请参考以下文章
CWE-501: Trust Boundary Violation违反信任边界的代码漏洞缺陷
启用AWS EMR专职KDC跨域信任(Cross-Realm Trust)的注意事项