【问题标题】:Restrict a directory that can be used only through a .net Application限制只能通过 .net 应用程序使用的目录
【发布时间】:2010-11-18 15:53:35
【问题描述】:

我有一个将某些文件存储在目录中的 Windows 应用程序。我想知道.net中是否有一种方法可以限制用户不能直接访问它(只需转到Windows中的该目录并获取文件),因此只有我的应用程序可以添加/验证/删除该目录中的文件。

【问题讨论】:

    标签: c# windows security permissions windows-xp


    【解决方案1】:

    只有当您的应用程序使用与运行应用程序的用户不同的凭据运行时,这才有可能。

    默认情况下,所有应用程序都使用启动进程的用户的凭据运行。这意味着应用程序具有与用户相同的目录和文件限制。如果没有不同的帐户,应用程序只能降低它访问文件系统的能力,而不能增加它。

    处理文件系统通常是邪恶的。即使您可以让用户不在该目录中播放,您仍然不能相信结果将处于与您离开它们完全相同的状态。其他用户、物理磁盘损坏或任何数量的其他因素都可能损坏您的文件。

    对文件系统进行合理编程的唯一方法是从一开始就期待失败,并在它实际工作时算自己幸运。

    【讨论】:

    • 感谢您的及时回答,那么您还有什么其他建议?
    • @paradisonoir,我需要了解有关您的应用程序的更多信息。但简而言之,不要相信文件系统是可靠的。相反,如果它有效,则将其视为奖励。从那个特定的概念开始你的计划,然后从那里开始。
    • @JaredPar,当然,我将使用不同的方法,这可以是其中之一。
    • @JaredPar,我的应用程序需要将文本等文件存储在数据文件夹中,然后在关闭应用程序时将其删除。我们存储它是因为当他们想要关闭应用程序时我们需要将它发送到另一台远程机器,并且因为它们很多,我无法将它们保存在内存中。我必须将它们存储在某个地方,但我担心的是应用程序何时仍在运行,并且用户可以访问这些文件(在发送和删除它们之前)
    【解决方案2】:

    应用程序需要以特定用户身份运行 - 该用户将始终拥有与您的应用程序相同的权限。您可能会创建一个以管理员身份运行的服务来阻止标准用户访问目录,但管理员仍然可以更改目录中的内容。

    我建议您为您的问题寻找另一种方法。有潜在的替代方案 - 也许您应该考虑在目录内容上保留某种类型的加密哈希。这至少可以让您验证内容没有被更改,尽管它不会阻止更改发生。

    【讨论】:

    • 感谢您的及时答复。这意味着我可以存储我的文件的哈希加密,然后我可以更好地控制它们。我知道限制目录绝对是可疑的。
    【解决方案3】:

    查看 FileSystemWatcher - 它不会阻止目录更改,但允许通知程序有关目录的更改。

    【讨论】:

      【解决方案4】:

      正如其他人所提到的,您需要应用程序充当与当前登录的用户不同的用户。您应该查看“模拟”,这里有一些链接可以让您开始让您的应用程序充当执行某些任务时的不同用户:

      http://csharptuning.blogspot.com/2007/06/impersonation-in-c.html

      http://www.codeproject.com/KB/cs/cpimpersonation1.aspx

      【讨论】:

      • 这些都是很好的提示和例子。虽然我的问题是他们想通过简单地复制文件来获取文件。
      • 不要让用户访问这些文件。创建另一个可以对文件执行操作并让您的应用程序模拟该用户的用户。这样一来,您的登录用户就无法对文件执行任何操作,但应用程序可以。
      【解决方案5】:

      最简单(尽管不安全)的方法是使用用户一无所知的隐藏文件夹。所以 \servername\hiddenfiles$

      更安全的替代方法是更改​​程序用于访问文件夹的凭据。他们是否有必要以自己的身份访问它?

      另一种方法是为每个不知道密码的用户创建一个虚拟帐户。使其与他们的 Windows 登录相关,因此 domain\myname 变为 domain\mynamehidden。然后使用它连接到目录。
      这将确保一切都可以很好地审计。

      【讨论】:

      • 他们不应该自己访问这些文件。
      • 所以第二个和第三个选项应该可以正常工作,第二个选项最容易实现。
      【解决方案6】:

      您可以在 .Net 中使用独立存储吗?虽然它不一定限制在您的用户之外,但它可能更难找到......(存储在本地设置\应用程序数据\登录用户的隔离存储下)

      通过使用/导入 System.Io.IsolatedStorage 的代码,您可以创建目录、文件等...正常。

      您也不必跟踪它所在的 HD 上的实际目录,因为 .Net 对此进行了管理。也许是一个不错的加分项。

      【讨论】:

      • 其实这就是我要找的。我想这会降低容易访问的风险。但是,如果他们偶然找到该目录,他们可以轻松地复制/粘贴它。我说的对吗?
      • 没错,但是该目录是隐藏的,所以大多数用户甚至不知道它的存在,除非他们弄乱了他们的资源管理器设置并且它相当深(由于它在操作系统中的位置而隐藏)。事实上,我永远不记得它在哪里! :)
      • 如果他们找到了,我会问他们在做什么?对我来说听起来有点像黑客攻击.....
      • 很公平,然后,如果我想检索这些文件,我可以通过我的应用程序读取它们。
      • 如果您的应用程序没有在权限方面做任何时髦的事情,那么是的,这就是隔离存储的意义所在。 :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-12
      • 1970-01-01
      • 2010-09-21
      • 2020-01-02
      • 2012-06-19
      • 1970-01-01
      相关资源
      最近更新 更多