2009-08-12 1 views
1

Какой самый умный способ предотвратить редактирование текстовым файлом (например, xml) пользователем? Мне нужно убедиться, что файл, в котором я храню имена пользователей и там привилегии для настольного приложения, не может быть просто отредактирован.Запретить редактирование файла

Возможно, я могу сгенерировать сертификат файла, и настольные приложения проверили это?

Я использую C# в приложении WinForms.

ответ

2

Чтобы предотвратить редактирование, вы можете использовать разрешения файловой системы.

Вы можете использовать шифрование для редактирования трудного

Вы можете получить хэш-значения для файла для обнаружения редактирования.

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

0

Поскольку ваша цель состоит в том, чтобы хранить привилегии пользователей непосредственно в XML-файле, вам необходим уровень безопасности, за исключением того, что пользователи не могут редактировать файл. Даже если бы вы (гипотетически) наложили какое-то ограничение на уровне операционной системы на редактирование файла, любой администратор мог бы просто отредактировать файл на другом компьютере и перезаписать защищенную версию.

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

Подход, который вы предлагаете создать сертификат, звучит точно. Вы можете либо вычислить хэш для всего файла, либо сделать это по отдельности (в зависимости от того, что имеет смысл в вашем контексте), в любом случае с использованием частного или секретного ключа, чтобы гарантировать, что кто-то, редактируя файл, не сможет просто пересчитайте хэш.

1

Простейшим способом, вероятно, является использование базы данных с идентификацией имени пользователя и пароля.

Самое умное - зашифровать его, чтобы данные не были доступны им.

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

+0

как шифровать данные? с государственным и закрытым ключом? – 2009-08-12 12:56:42

0

IMHO вы не можете гарантировать, что никто не может его редактировать, но вы можете зашифровать файл для защиты информации.

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

0

Если вы ДОЛЖНЫ хранить эти данные в текстовом файле XML, вы можете рассматривать его подписями в соответствии с вашим приложением каждый раз, когда он изменяется и проверяет цифровую подпись при чтении файла.

Подробнее о том, как sign XML file и как verify signature.

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

+0

Я не могу использовать db, поэтому мне нравится идея его цифровой подписи приложением. Как бы Вы это сделали? – 2009-08-12 12:56:06

+0

Я добавил ссылки на мой ответ, который укажет вам на MSDN, объясняющий поэтапное подписание и подпись подписи XML. – RaYell

0

Лично я не думаю, что XML является подходящим форматом для хранения защищенной информации в этом случае. Весь смысл XML, по сравнению с бинарными форматами, заключается в том, что он доступен для чтения/редактирования. Используйте какой-то зашифрованный двоичный формат с известным хешем/crc, который говорит вам, если вам мешали, если вы хотите полной безопасности.

+0

если не xml, какой бинарный файл вы бы создали? – 2009-08-12 12:57:12

+0

Я не уверен! Но может быть, какой-то бинарный сериализованный список, содержащий хеши паролей? См. Http://dotnetperls.com/serialize-list-tutorial –

0

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

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

+0

Мне не нужно ничего, что ограничено пользователем или компьютером, я не хочу, чтобы кто-то еще, кроме моего приложения, редактировал файл. это также возможно? – 2009-08-12 12:57:57