问题标签 [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 投票
1 回答
1173 浏览

asp.net - SharePoint 2007 远程文件访问被拒绝 CAS

我有代码在 SharePoint 2007 的 PageLayout 内的 ascx 中运行,它访问远程服务器上的文件,即 File.Create("\servername\sharename\folder\file.txt")。代码在 web.config 中将 CAS 信任设置为 Full 的 SharePoint Web 应用程序中运行。File.Create 引发以下异常:-

System.UnauthorizedAccessException

拒绝访问路径 '\\servername\sharename\folder\file.txt'。

共享共享给具有完全控制权的所有人,并且 NTFS 权限设置为具有完全控制权的所有人。Web 应用程序池在域帐户下运行,也具有访问该资源的明确权限(不是应该需要的)。

我在远程机器上运行了 Process Monitor,并且服务器上没有记录任何点击。这让我相信这是 SharePoint 代码访问安全设置的问题。就像我上面所说的,对 web.config 的信任设置为 Full。

CAS是否可能仍在阻止远程访问?谁能想到其他要审查的领域?


更新

多一点信息...

我已尝试将应用程序池设置为域管理员,但问题仍然存在。当使用相同的方法访问本地计算机上的驱动器时,它工作正常。使用应用程序池帐户在共享点之外的 SnippetCompiler 中运行相同的代码可以正常工作。

希望这会有所帮助,如果您能想到我可以尝试的更多调查或测试途径,请告诉我。


更新

我不确定这是否会影响问题,但本地服务器正在运行 Windows Server 2003,而远程服务器正在运行 Windows 2000。


更新

我刚刚尝试通过 Web 部件运行代码,它工作正常。我在失败的项目中使用的文件结构如下:-

然后在 IIS 中,我具有以下结构:-

然后在 PageLayouts 中,我使用以下内容引用控件:-


更新

谜团越来越深……

当我从 SharePoint Web 前端服务器上的 Internet Explorer(6 或 7)访问 sharepoint 站点时,我没有收到异常。

当我从 SP Web 前端服务器从 Mozilla Firefox 访问共享点站点时,我确实遇到了异常。

当我从任何浏览器远程访问共享点站点时,我得到了异常。

此外,只要他们有权访问共享点站点,我使用什么用户登录该站点也没有区别。

有什么想法吗?


更新

嗯,我现在发现,如果我远程访问共享点站点并且共享点站点尝试在本地执行 File.Create()(即 File.Create("C:\temp\abc.txt")),那么它可以工作. 如果我从共享点框访问共享点站点并远程执行 File.Create()(即 File.Create("\ServerName\ShareName\FolderName\file.txt")),那么它可以工作。

只有当我远程访问共享点站点并让共享点站点尝试远程执行 File.Create() 时,它才会失败。有点像双跳问题。这让我认为这可能是一个 NTLM / Kerberos 问题。

目前,我们正在使用 NTLM 身份验证运行。

有没有其他人遇到过这种问题?


更新

是的,我很确定这是一个不允许双跳的 NTLM 问题。我刚刚将共享点站点上的身份验证更改为使用基本身份验证并且它有效。将其改回集成身份验证,但失败了。

现在决定是移动服务器场以使用 Kerberos 还是找到解决此问题的其他方法。:-/


更新

现在只是给 SPSecurity.RunWithElevatedPrivileges 一个机会。但有一件事,RunWithElevatedPrivileges 是否意味着在这种情况下使用?以前,我只使用它来访问 SharePoint 中的列表和库,而不是访问网络中的文件。

有什么想法吗?


更新

是的,SPSecurity.RunWithElevatedPrivileges 解决了这个问题。:-)

0 投票
1 回答
1621 浏览

security - 使用解决方案框架在 Sharepoint 中部署 CAS 策略

我正在使用共享点解决方案机制部署我的 Web 部件。Untul 现在,一切正常,但是当我将 CAS 策略添加到 manifest.xml 文件时,部署无法正常工作。使用 CAS 策略部署解决方案时,没有错误,但没有创建策略文件,没有复制 dll,也没有将 SafeControls 条目添加到 web.config。我的 manifest.xml 文件如下所示:

以前有人遇到过这样的问题吗?在这一点上我已经没有想法了,所以我愿意接受建议。

0 投票
1 回答
417 浏览

.net - 关于代码访问安全的几个问题

我在亚马逊上买了一本书,目的是为我准备 70-536 考试。我发现了一些对我来说有点混乱的信息。让我引用它 - 我将把我的问题放在一起。

要了解如何使用安全策略,请考虑一位应用程序开发人员,他想使用从 Internet 下载的程序集。开发人员已将程序集下载到她的本地计算机,因此(?) 它将在我的电脑区域中运行。

是这样吗?我认为代码组成员身份(我的电脑区)取决于在程序集中硬编码的证据。我们如何知道程序集正在使用 Zone: MyComputer 证据,这在这种情况下是必要的?

开发人员的计算机是 AD DS 域的成员,并且域管理员在企业安全策略中创建了一个代码组,该代码组授予本地计算机上的程序集 Everything 权限集。这比机器安全策略授予“我的电脑”区域中的程序集的 FullTrust 权限集更具限制性,因此 Everything 权限集优先。

但是,开发人员不确定程序集是否可以安全运行,因此她想应用 Internet 权限集来防止程序集写入磁盘或通过网络进行通信。她没有以管理员身份登录到她的计算机,但她仍然可以启动 .NET Framework 2.0 配置工具并修改用户安全策略。(不允许标准用户修改计算机安全策略。)通过修改用户安全策略,她可以将“我的电脑”区域中的程序集限制为 Internet 权限集。 她运行的程序集将受到限制,而不会影响同一台计算机的其他用户。

假设我在用户策略级别(以All__Code作为父级)创建嵌套代码组“ test ”并将其成员资格条件分配给区域:MyComputer。这是否意味着我还需要将All__Code的权限集从Full Trust更改为Nothing

亲切的问候 PK

0 投票
2 回答
841 浏览

.net - 组装证据

以下代码的目的是什么?:

据我所知,CLR自动(它要求 Windows)根据程序集的运行位置(本地机器、互联网等)分配区域。我猜这是为了减少程序集的权限,但是当我们有两个证据时,我们也有两个代码组,它们在给定的策略级别内求和。

亲切的问候 PK

0 投票
1 回答
854 浏览

.net - 声明性安全需求 - SecurityAction.Demand 是否已缓存?

我在模拟用户时遇到问题。我有一个这样声明的方法:

调用代码是:

默认用户不是 LocalTestGroup 的成员。令牌指示的用户是 LocalTestGroup 的成员。

问题:

第一次调用 LocalTestGroupOnly() 成功,因为令牌指示的用户是 LocalTestGroup 的成员。对 LocalTestGroupOnly() 的第二次调用(作为默认用户)应该会失败,因为默认用户不是“Test”并且它不属于 LocalTestGroup。问题是这种方法也成功了。

如果我单独运行程序 - 无论有没有模拟,我们的行为都是正确的:它在模拟为“测试”时成功,在作为默认用户调用时失败。

这里有什么问题?

0 投票
2 回答
347 浏览

.net - 为什么这个代码访问安全示例被破坏了?

我知道 CAS的价值有限,但我还是想了解一下。

我不明白我看到的行为:基本默认 CAS 在我相当正常的环境中似乎根本不起作用。

采取这个示例类:

我构建了这个并将 exeCASNotWorkingExample.exe放在另一台机器(IP 为 192.168.1.101)上的文件共享“不受信任”上。然后我使用 非管理命令提示符运行它\\192.168.1.101\untrusted\CASNotWorkingExample.exe,期望它返回“拒绝”。它不是; 它返回“授予”。

Windows 知道它正在处理一个安全性有问题的远程 EXE。当我从开始菜单运行...对话框运行相同的命令时,我收到通常的安全警告“无法验证发布者。你确定等等等等”。因此,不会以某种方式错误地认为 exe 正在本地计算机上运行并错误分配了区域。

此外,当我使用 .NET 2.0 配置工具查看相同的 exe 时(右键单击“运行时安全策略”,选择“评估程序集...”),我看到 .NET 仅将 Internet_Zone 权限分配给程序集. 这些权限不包括 FileIOPermission(独立存储是它自己的权限)。

替代文字 http://img5.imageshack.us/img5/2256/casperms.jpg

可能对其他人有用但到目前为止还没有对我有用的数据:

  • 我在阅读MCTS 70-536 考试的MS Press 书籍时遇到了这个问题。第 11 章是关于 CAS 的;第 1 课 / 示例 1 对我来说失败了,就像上面描述的那样。你在这里看到的是一个精简的变体。
  • 我已经验证了像这样的 EXE 实际上可以写入磁盘,即 IsGranted 检查可能是正确的。
  • 两台机器运行 Vista SP1 和 WinXP。无论哪个是客户端,哪个是文件服务器,行为都是相同的,所以这不是 Vista 的事情。
  • 当作为标准非特权用户和作为管理员运行时,行为是相同的。
  • 不在 AD 域中运行。
  • 客户端和文件服务器上的用户名和密码相同,因此我可以访问文件而无需使用net use提供凭据。

我敢肯定这将是那些“arrrgh”时刻之一......我错过了什么?

0 投票
4 回答
1701 浏览

.net - .NET 代码访问安全性:有用还是过于复杂?

另请参阅“代码访问安全性”是否适用于任何现实世界?

我想得到一些关于这个的其他意见...

我喜欢桌面应用程序的代码访问安全的想法。但在 .NET 的生命周期中,我不得不承认,我实际上从未遇到过 CAS 确实阻止了对我有利的东西的情况。

然而,我曾多次遇到像跨映射驱动器共享快速 .NET 应用程序这样简单的事情成为企业代码访问的噩梦。不得不打破 caspol.exe 来创建受信任的路径规则,并且无法清楚地知道失败的原因,这使得 CAS 似乎给开发和部署过程带来了比它在安全方面提供的更多的挫败感。

我想听听 CAS 实际上帮助多于伤害的某些情况,或者是否还有其他人对其当前的实施和默认设置感到沮丧。

0 投票
3 回答
1825 浏览

.net - 在部分信任环境中调用 Marshal.GetHRForException (SecurityPermission)

我有一些 IO 代码可以读取 try..catch 中的流。它捕获 IOException 并在捕获中调用System.Runtime.InteropServices.Marshal.GetHRForException() ,以尝试根据 HResult 采取不同的操作。像这样的东西:

该程序集使用AllowPartiallyTrustedCallersAttribute进行签名和标记。

但是在 ASP.NET 中使用 trust="medium" 运行这段代码,我得到了这个异常:

几个问题:

  1. 我认为发生异常是因为 GetHRForException 调用了非托管代码,这在中等信任中是不允许的。正确的?
  2. 抛出此异常,不是在执行 GetHRForException 时,而是在方法被 JIT 处理时 - 对吗?(堆栈跟踪显示了我的方法,但我 99% 确定没有发生 IO 异常)
  3. 如果是这样,有没有办法让我改变部分信任环境中的行为,这样我就不会在不允许的地方调用 GetHRForException (非托管代码)?换句话说,如何让 JIT 在编译时成功,同时在运行时评估代码是否应该调用 GetHRForException()?像这样的东西:

我认为有一个运行时机制来测试权限是否可用,但一直找不到。


编辑这篇博客文章是答案吗?微软的 ShawnFa 说你不能在一个受 LinkDemand 保护的方法周围做一个 try ... catch(SecurityException)。如果 MethodA() 调用 MethodB(),并且 MethodB() 用 LinkDemand 标记为完全信任,则使用 MethodA 检查 LinkDemand is Jit'ed。因此,为了避免 SecurityException,我需要将 Marshal.GetHRForException 提取到一个单独的方法中。那是对的吗?

应用于我的代码,MethodA() 可能是调用 Read 的代码,然后在 catch 中尝试调用 GetHRForException()。GetHRForException 是 MethodB()。当 MethodA() 为 JIT 时评估 LinkDemand。(此 LinkDemand 在我的中等信任 ASP.NET 方案中失败)。如果我将 GetHRForException 移动到一个新方法 MethodC() 中,并且仅在命令式 permission.Demand() 成功后有条件地调用 MethodC(),理论上我应该能够在 JIT 时间避免 SecurityException,因为 MethodC() 将只有在 permission.Demain() 成功后才会进行 JIT。

0 投票
2 回答
6819 浏览

c# - 这个安全警告是什么意思(.Net Process 类)?

我正在使用 VSTS 2008 + .Net 2.0 + C#。我在构建后运行代码分析。我收到以下令人困惑的安全警告。这是警告和相关代码,任何想法有什么问题吗?如果有安全警告,如何解决?

警告:CA2122:Microsoft.Security:“TestHtml()”调用具有 LinkDemand 的“Process.Start()”。通过进行此调用,“Process.Start()”间接暴露给用户代码。查看以下可能公开绕过安全保护的方法的调用堆栈:

0 投票
1 回答
300 浏览

c# - SecurityAttribute.Unrestricted 问题

我对这个属性感到困惑,正如这里提到的, http: //msdn.microsoft.com/en-us/library/system.security.permissions.securityattribute.unrestricted.aspx我们可以给它完整或不完整的。

我的困惑是为了直截了当地理解许可,应该只有两种状态 - 授予和未授予,完整和非完整是什么意思?