问题标签 [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 回答
136 浏览

c# - 跨类调用扩展方法需要 ControlEvidence 权限

我一直在努力理解代码访问安全性,我希望有人能够向我解释这种行为以及为什么它需要添加权限。假设我有两种扩展方法

如果这两个方法出现在同一个类中,它们不需要特殊的 CAS 权限。但是,一旦我将 dob 移到另一个类中,我就需要带有 ControlEvidence 标志的 System.Security.Permissions.SecurityPermission。从类之间的扩展方法中调用扩展方法是否有一些限制?除了将所有扩展合并到一个巨大的单个类中之外,还有其他解决方法吗?

'''编辑:''' 事实证明,实际问题与扩展方法无关。有一个构造函数在其中一个类中使用了 RegEx。正则表达式以及在运行时编译的其他函数需要 ControlEvidence。感谢您的帮助,这个 CAS 的东西非常棘手。

0 投票
1 回答
341 浏览

security - 代码访问安全将如何在 .NET Framework 4 下工作?

我听说代码访问安全性在 .NET Framework 4 下发生了彻底的变化。任何人都可以确认它现在将如何工作,以及对遗留应用程序的影响是什么?

0 投票
1 回答
337 浏览

code-access-security - 将许可证密钥添加到 zip 文件

我有一个以 zip 文件形式发布的产品。我想为其添加一些安全性,或者可能是密码或许可证密钥,以阻止未经授权的文件交易。有小费吗?

0 投票
1 回答
550 浏览

c# - SharePoint 代码访问安全性要求调用 Page.TemplateControl.ParseControl

调用此处引用的方法 Page.TemplateControl.ParseControl 的 CAS 策略要求是什么? http://msdn.microsoft.com/en-us/library/kz3ffe28(loband).aspx

具体来说,在 SharePoint 中,我尝试在最小信任环境中调用该方法,但在页面上出现此错误:

请求“System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”类型的权限失败。

但是,在中等信任环境中,没有问题。

谢谢!

0 投票
2 回答
843 浏览

.net - 限制对 .NET 中 DLL 的访问

我为一家公司编写内部软件。

我总是想尽可能地利用 OOP 技术。在这种想法中,我想创建一个独立于其自身的数据访问层 (DAL) .DLL

我可以做些什么来限制 DALDLL仅访问我的业务逻辑层DLL

我需要的最后一件事是公司中具有一点编程知识并且可以访问系统(通过 Active Directory)来安装 .NET Express、引用我的 .NET.DLL并开始在真实系统之外触发数据访问代码的人。是否有任何 .NET 机制可以用来限制 aDLL只能由预先选择的主机应用程序/DLL 使用?

0 投票
1 回答
4618 浏览

c# - 代码访问安全问题 - 这里有什么问题?

背景

我有一个构建后事件,我用它来生成一些包含我们应用程序当前版本号的批处理文件。该事件调用一个批处理文件,该文件调用一个托管应用程序,该应用程序加载程序集并使用反射来查找其版本信息。

问题

当构建后事件在本地运行时,一切都很好。当它在我们的自动构建过程下运行时,我在日志中看到以下错误。我对代码访问安全一无所知,希望有人能迅速指出问题所在。

0 投票
1 回答
6733 浏览

.net - 在由部分信任程序集调用的受信任程序集中授予 FullTrust

想象以下环境:在部分信任模式下运行的XBAP应用程序(默认行为;要求完全信任不是一个选项 - 但在您询问之前,如果 XBAP 完全信任,一切都按预期工作)正在引用本地安装的程序集,位于 GAC 中。为此,我们AllowPartiallyTrustedCallers为本地程序集启用“”选项,并授予完全信任。(想象这是某种本地连接对应物)

(顺便说一下,我们知道使用 AllowPartiallyTrustedCallers 属性的安全方面,但这超出了本文的范围,只是不关心)

现在,即使我们的本地 GAC 程序集完全信任(我们可以通过Assembly.GetExecutingAssembly().IsFullyTrusted随时调用来检查),它也会失败任何请求(隐式或显式),因为它是由部分信任的调用者(我们的 XBAP)调用的。(如果我误解了什么,请纠正我)。幸运的是,我们可以通过显式断言来获得本地 GAC 程序集内的权限,例如:

这样,我们就可以在此时阻止对需求的完整堆栈遍历,并根据需要进行任何文件访问。(再次,请纠正我......) 这实际上非常有效!(在这种情况下)

问题是,我们只是不做任何文件 IO,实际上我们正在调用外部库,它们应该能够做他们想做的任何事情(他们可能会做很多事情,访问注册表,发出 Web 服务请求,写文件,调用非托管代码 - 细节我们不知道,但我们可以信任它们),并防止需求堆栈遍历到达我们部分信任的调用者。我们应该能够实现这一点,因为一切都是通过我们本地安装和受信任的 GAC 程序集完成的。(再次,请不要在这里关心安全方面,假设我们可以信任客户端)

解决这个问题的方法:

  • 我们首先想到的是,在使用外部库之前,为几乎所有权限声明一组权限 (PermissionSet)。这几乎可以工作,但看起来在某些时候仍然会发生安全异常——要么是因为外部库可能会启动更多由于某种原因而失败的线程,要么是因为它访问了入口程序集——事实上,我们不知道。

  • 二、我们尝试了以下属性

p>

它也没有用。

  • 第三,我们考虑打开一个新的 AppDomain,使完全受信任的 GAC 程序集成为 AppDomains 入口点,并在此 appdomain 内运行任何东西——任何堆栈遍历都无法再到达部分受信任的调用者——在我们的理论中)。不幸的是,我们无法实现这一点……或者新创建的 AppDomain 未能满足更多要求,即使设置为在“MyComputer”安全区域证据或不受限制的 SecurityPermission 下运行。我无法明确授予对整个 AppDomain 的完全信任。

  • 第四,不能选择使用caspol。(由于部署原因)

现在,由于这应该是很多信息,我希望您了解我们要存档的内容。

为了明确这一点:完全受信任的程序集如何对其调用的程序集断言完全信任,停止所有堆栈遍历以到达部分受信任的调用者?

提前谢谢了

0 投票
1 回答
963 浏览

c# - 使用证据、安全策略和权限来防止程序集加载到 Web 服务器上

假设有一个.NET 类库代码,例如,写入 Windows 注册表。然后这段代码在互联网上运行有问题,因为默认的互联网策略不允许写入注册表。

通过在程序集中添加一条RequestMinimum语句,我们可以指定代码需要写入权限才能写入注册表。这不会改变代码没有权限的事实,但会阻止程序集加载;运行时将抛出一个System.Security.Policy.PolicyException并识别所需的权限。

您现在是否还有其他使用证据安全策略权限代码访问安全性的关键元素)来防止程序集加载到 Web 服务器上的示例?

0 投票
2 回答
143 浏览

.net - 如何将新的二进制文件复制到 C:\Program Files?

我正在创建一个自动更新自身的 Windows 应用程序。出于各种原因,我没有使用 ClickOnce。当我尝试 File.Move() 我更新的文件到 Windows 7 上的 C:\Program Files 时,我收到以下错误:

拒绝访问路径“C:\Program Files\<company>\<app>\<app.exe>”。

我没有收到 UAC 提示。我尝试更新的 exe 当前未运行。

0 投票
3 回答
708 浏览

c# - 如何判断库代码中是否允许代码访问安全性

在 .NET 4 中,代码访问安全 (CAS) 已被弃用。每当您调用隐式使用它的方法时,它都会失败并显示NotSupportedException,这可以通过配置开关解决,使其回退到旧行为。

我们有一个在 .NET 3.5 和 .NET 4 中都使用的通用库,因此我们需要能够判断是否应该使用 CAS 方法。

例如,在 .NET 3.5 中,我应该调用:

而在 .NET 4 中我想调用

调用Load(string, Evidence)抛出一个NotSupportedException.

当然这可行,但我想知道是否有更好的方法: