Ограничить каталог, который может быть использован только через приложение .net - PullRequest
2 голосов
/ 11 августа 2009

У меня есть приложение Windows, которое хранит определенные файлы в каталоге. Я хотел бы знать, если в .net есть способ, которым я могу ограничить пользователей, чтобы они не имели прямого доступа к нему (просто зайдя в этот каталог в Windows и загрузив файлы), чтобы только мое приложение могло добавить / проверить / удалить файл в этом каталоге.

Ответы [ 6 ]

1 голос
/ 11 августа 2009

Не могли бы вы использовать изолированное хранилище в .Net? Хотя это не обязательно ограничено для ваших пользователей, его может быть намного сложнее найти .... (хранится в локальных настройках \ данные приложения \ изолированное хранилище для вошедшего в систему пользователя)

С помощью кода вы работаете с ним, используя / импортируя System.Io.IsolatedStorage, а затем вы можете создавать каталоги, файлы и т. Д. ... обычный.

Вам также не нужно отслеживать фактический каталог на HD, в котором он находится, поскольку .Net управляет этим. Может быть, хороший плюс.

1 голос
/ 11 августа 2009

Приложение должно запускаться от имени определенного пользователя - и этот пользователь всегда будет иметь те же права, что и ваше приложение. Потенциально вы можете создать службу, которая будет работать от имени администратора, чтобы запретить обычным пользователям доступ к каталогу, но администратор все равно сможет что-то изменить в каталоге.

Я предлагаю вам поискать другой подход к вашей проблеме. Существуют потенциально альтернативные варианты - возможно, вам следует рассмотреть вопрос о сохранении некоторого типа зашифрованного хэша в содержимом каталога. Это, по крайней мере, позволит вам убедиться, что содержимое не было изменено, хотя и не предотвратит изменение.

1 голос
/ 11 августа 2009

Это возможно только в том случае, если ваше приложение работает с учетными данными, отличными от пользователя, запускающего приложение.

По умолчанию все приложения запускаются с учетными данными пользователя, запустившего процесс. Это означает, что приложение имеет те же ограничения на каталог и файл, что и пользователь. Без другой учетной записи приложение может только уменьшить возможность доступа к файловой системе, но не увеличить ее.

Работа с файловой системой - это зло в целом. Даже если вы можете заставить пользователя не играть в этом каталоге, вы все равно не можете доверять результатам, которые будут в том же состоянии, в котором вы их оставили. Другие пользователи могут повредить файлы физическим диском или любым другим способом.

Единственный способ разумно программировать файловую систему - ожидать сбоя с самого начала и считать себя счастливчиком, когда он действительно работает.

0 голосов
/ 11 августа 2009

Самым простым (хотя и не безопасным) способом будет использование скрытой папки, о которой пользователи ничего не знают. так \ имя_сервера \ hiddenfiles $

Более безопасной альтернативой было бы изменение учетных данных, которые программа использует для доступа к папке. Нужно ли им получать доступ к нему как к самим себе?

Альтернативой может быть создание фиктивной учетной записи для каждого пользователя, где он не знает пароля. Сделайте так, чтобы они относились к их логину Windows, поэтому домен \ myname становится доменом \ mynamehidden Затем используйте это для подключения к каталогу.
Это также гарантирует, что все может быть хорошо проверено.

0 голосов
/ 11 августа 2009

Как уже упоминали другие, вам нужно, чтобы приложение действовало от имени другого пользователя, нежели те, которые в данный момент вошли в систему. Вам следует обратиться к «олицетворению», вот несколько ссылок, которые помогут вам начать работу над приложением в качестве другой пользователь при выполнении определенных задач:

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

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

0 голосов
/ 11 августа 2009

Посмотрите на FileSystemWatcher - он не предотвращает изменения в каталоге, но позволяет уведомлять программу об изменениях в каталоге.

...