限制只能通过.net应用程序使用的目录

时间:2009-08-11 15:16:12

标签: c# windows security permissions windows-xp

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

6 个答案:

答案 0 :(得分:1)

仅当您的应用程序使用与运行应用程序的用户不同的凭据运行时,才能执行此操作。

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

处理文件系统通常是邪恶的。即使您可以让用户不在该目录中播放,您仍然无法相信结果将与您离开时完全相同。其他用户,物理磁盘损坏或任何其他内容可能会损坏您的文件。

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

你能在.Net中使用隔离存储吗?虽然它不一定受到用户的限制,但可能更难找到....(在本地设置下存储\应用数据\隔离存储用于登录用户)

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

你也不必跟踪HD上的实际目录,因为.Net管理它。也许一个不错的加分。

答案 3 :(得分:0)

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

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

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

答案 4 :(得分:0)

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

更安全的替代方法是更改​​程序用于访问该文件夹的凭据。他们有必要像他们一样访问它吗?

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

答案 5 :(得分:-1)

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