问题标签 [code-access-security]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
490 浏览

.net - 我是否需要担心仅完全信任的 .EXE 中的链接需求?

我试图理解 FxCop CA2122 消息(可能在禁用这些可怜的东西之前),我显然已经超越了我对 .NET CAS 的理解。

该应用程序是一个 .EXE,标有 AllowPartiallyTrustedCallers。我们从代码分析中收到 CA2122 警告,抱怨我们未能将 LinkDemand 从最低级别的调用向上传播到本身具有 LinkDemand 的方法。

显然,我们可以将 LinkDemands 放在调用者身上,然后是调用者的调用者,无限循环。这似乎完全没有目的,因为此代码的每次调用都将始终是完全信任的,因此(AIUI)无论如何总会满足每个链接需求。Eric Lippert 似乎也认为这样做非常危险。

所以:

  • 我缺少什么汇编级属性来说“此代码只能在完全信任的情况下运行”?(我认为 AllowPartiallyTrustedCallers 的缺席暗示了这一点,但可能不适用于 .EXE)

  • 还是我应该关闭那个 CA 警告并继续前进?在禁用它们之前,我确实想正确理解它们...

更新:有人问我我们使用的是哪个框架版本——它是 2.0RTM,而且升级到那个点之后非常困难,因为它是在 XPe 平台上的。

0 投票
2 回答
244 浏览

.net - 使用自定义权限加载程序集

我需要将不受信任的程序集加载到我的 AppDomain 中。我不想为这个程序集执行沙盒化新的 AppDomain,因为它在内部需要访问某些功能,例如 HttpContext.Current(在单独的沙盒化 AppDomain 中为空)。

我认为这样做的旧方法是使用一些自定义证据调用 Assembly.Load,但看起来这已被 4.0 中的 CAS 更改过时:

http://msdn.microsoft.com/en-us/library/ms145229.aspx

http://msdn.microsoft.com/en-us/library/ee191568(VS.100).aspx

我不太明白如何使用新的安全模型在这里完成我想要的......有人可以解释或建议一种替代方法吗?

谢谢。

0 投票
5 回答
7310 浏览

.net - 寻找一种实用的方法来沙箱化 .NET 插件

我正在寻找一种从 .NET 应用程序访问插件的简单且安全的方法。虽然我认为这是一个非常普遍的要求,但我很难找到满足我所有需求的任何东西:

  • 宿主应用程序将在运行时发现并加载其插件程序集
  • 插件将由未知的 3rd 方创建,因此必须对它们进行沙盒处理以防止它们执行恶意代码
  • 一个通用的互操作程序集将包含主机及其插件引用的类型
  • 每个插件程序集将包含一个或多个实现通用插件接口的类
  • 初始化插件实例时,宿主会以宿主接口的形式传递给它自己的引用
  • 主机将通过其通用接口调用插件,插件也可以调用主机
  • 主机和插件将以互操作程序集中定义的类型(包括泛型)的形式交换数据

我对 MEF 和 MAF 都进行了调查,但我很难了解如何使它们中的任何一个符合要求。

假设我的理解是正确的,MAF 无法支持泛型类型跨越其隔离边界的传递,这对我的应用程序至关重要。(MAF 实现起来也非常复杂,但如果我能解决泛型类型问题,我会准备好使用它)。

MEF 几乎是一个完美的解决方案,但似乎达不到安全要求,因为它将其扩展程序集加载到与主机相同的 AppDomain 中,因此显然可以防止沙箱。

我见过这个问题,它谈到了在沙盒模式下运行 MEF,但没有描述如何。这篇文章指出“在使用 MEF 时,您必须信任扩展不会运行恶意代码,或通过代码访问安全性提供保护”,但同样,它没有描述如何。最后,还有这篇文章,它描述了如何防止加载未知插件,但这不适合我的情况,因为即使是合法的插件也会是未知的。

我已成功地将 .NET 4.0 安全属性应用于我的程序集,并且 MEF 正确地尊重了它们,但我不明白这如何帮助我锁定恶意代码,因为许多框架方法可能是安全威胁(例如System.IO.File) 的方法被标记为SecuritySafeCritical,这意味着它们可以从SecurityTransparent程序集中访问。我在这里错过了什么吗?我可以采取一些额外的步骤来告诉 MEF 它应该为插件程序集提供 Internet 权限吗?

最后,我还研究了使用单独的 AppDomain 创建我自己的简单沙盒插件架构,如此所述。然而,据我所知,这种技术只允许我使用后期绑定来调用不受信任程序集中类的静态方法。当我尝试扩展此方法以创建我的插件类之一的实例时,返回的实例无法转换为通用插件接口,这意味着主机应用程序无法调用它。是否有一些技术可以用来跨 AppDomain 边界获取强类型代理访问?

我为这个问题的长度道歉;原因是展示我已经调查过的所有途径,希望有人可以提出一些新的尝试。

非常感谢你的想法,蒂姆

0 投票
2 回答
1649 浏览

security - 保护域对象的正确方法?

如果我有一个实体 Entity 和一个服务 EntityService 和 EntityServiceFacade 具有以下接口:

通过在服务级别控制对 getEntity 方法的访问,我可以轻松地保护对实体的读取访问。但是一旦门面引用了一个实体,我该如何控制对它的写访问呢?如果我有一个 saveEntity 方法并像这样在服务(不是外观)级别控制访问(此处使用 Spring 安全注释):

这里的问题是访问控制检查在我更改实体名称之后已经发生,所以这还不够。

你们是怎么做到的?您是否改为保护域对象方法?

谢谢

编辑:

如果您保护您的域对象,例如使用以下注释:

然后我是否打破了域模型(根据 DDD?)

编辑2

我找到了一篇关于这个主题的论文。该论文的结论说,一个好的方法是注释域对象方法以保护它们。对此有什么想法吗?

0 投票
3 回答
322 浏览

c# - 使用具有代码访问安全性的 C# 迭代器方法时出现问题

我有一个使用迭代器块返回的简单方法IEnumerable<T>

通常,此方法工作正常,但如果我将[SecurityCritical]属性应用到程序集(或包含上述方法的类),它会TypeLoadException在尝试调用该方法时抛出 a。无法加载的类型是编译器生成的与迭代器方法相对应的类,它GetEnumerator是导致问题的方法,因为它是安全透明的。

为了比较,如果我修改上述方法以填充并返回 a List<MyItem>,一切正常。

有什么建议么?

谢谢,

蒂姆。

0 投票
3 回答
378 浏览

asp.net - 为什么我的 ASPX 页面不能访问网络服务器本身的目录?

我有一个 Web 客户端,它以 XML 的形式向我的 Web 服务器发送请求。Web 服务器创建一个(相当大的)文件并将其保存在缓存目录中,并通过响应流将其返回给 Web 客户端。这在我尝试的前几次运行良好,但突然停止工作并报告以下异常(用 XML 包装):

我对代码访问安全性了解不多。我什至尝试将目录的完全控制权交给每个人。这不是问题,因为这是开发服务器而不是公共机器。我不明白为什么这会在前几次起作用,但现在停止工作。

我在 Windows 7 64 位上为服务器和客户端(它们是同一台机器)使用 Visual Studio 2008。我正在使用 IIS 7.0 和 .Net Framework 3.5。

美国东部时间 2010 年 12 月 13 日 16:05 编辑:

我收到此错误是因为我使用的是 Codeplex 的 DotNetZip 库。有没有办法将程序集添加到 IIS 或我的配置?

0 投票
6 回答
270 浏览

security - 网站源代码的企业间谍活动

这可能不是最技术性的问题,但我只是感兴趣,尽管如此......

像谷歌这样的大公司如何避免员工窃取他们的代码?也许我错了,但我会假设他们的搜索算法的源代码(除其他外)对他们的竞争对手(即微软)是有价值的。

我想我最好这样说:

是什么阻止了一个有足够权限的不道德员工访问谷歌的特定项目代码存储库并将大量代码复制到闪存驱动器并将其带到他们的竞争对手?

0 投票
1 回答
754 浏览

cloud - 云中的安全协作软件开发环境

我正在寻找在云中运行的安全协作软件开发环境,例如 Chaperon。它应防止代码被复制粘贴到环境之外,并应采取一切措施防止、检测和阻止 IP 盗窃。当然,它应该包括所有用于颠覆跟踪和调试的常用 IDE 工具。有什么建议么?

0 投票
1 回答
57 浏览

flash - 使 Flash 电影不可下载

有什么办法可以在源代码中隐藏 Flash 的来源,使电影本身不可下载,或者最好不要复制?

0 投票
2 回答
4441 浏览

c# - 由于过时的 CAS 政策,正在寻求 AppDomain.CreateDomain(string, evidence) 的替代方案

我正在阅读 Microsoft .Net Framework--Application Development Foundation Training Kit 书第 8 章第 2 课:配置应用程序域

ShowWinIni 是我要执行的程序的程序集名称

当我执行时:

我收到以下消息:“此方法隐式使用 .NET Framework 已废弃的 CAS 策略。出于兼容性原因,为了启用 CAS 策略,请使用 NetFx40_LegacySecurityPolicy 配置开关。请参阅http://go.microsoft .com/fwlink/?LinkID=155570了解更多信息。”

当我创建一个没有证据对象的 AppDomain 时,我可以很好地执行程序集。

当然,我访问了http://go.microsoft.com/fwlink/?LinkID=155570但我仍然对如何创建具有指定权限的应用程序域感到困惑。

我发现的下一个最有用的站点是http://msdn.microsoft.com/en-us/library/bb763046.aspx,但我的 StrongName 对象计算为 NULL。

Program 是实现所有这些代码的类的名称。

提前感谢您的建议和提示!