Как я должен помешать пользователям изменять мои файлы данных? - PullRequest
4 голосов
/ 18 мая 2011

Я работаю над проектом, который заменит устаревшее программное обеспечение на нашем производственном предприятии.Одна из моих проблем заключается в том, что в настоящее время файлы конфигурации, кэши сценариев и т. Д. Представляют собой обычный текст, хранящийся в системе, которую использует пользователь.Многие из этих вещей будут оттеснены, чтобы ограничить доступ к сети, но такие вещи, как файлы конфигурации, остаются локальными.Это уже проблема пользователей, которые думают, что знают, что делают с системой, и изменяют конфигурационные файлы.Я не хочу, чтобы это происходило больше в новом программном обеспечении.Как я должен предотвратить это?Шифрование?Есть ли какая-то подпись / контрольная сумма с поиском в базе данных?Какие функции предлагает C # / .NET, чтобы помочь мне с этим?

ОБНОВЛЕНИЕ: Просто для решения некоторых вопросов, которые были затронуты в комментариях, каждый пользователь на производственном этаже имеетдоступ администратора к системе, над которой они работают.Это вряд ли изменится в ближайшее время, так как большая часть безопасности обеспечивается ограничением доступа к папкам в сети, веб-службам и базам данных.Разрешения были бы идеальными, я согласен, но я должен работать в среде, которую мне предоставили.Я планирую обсудить это на моей встрече с IS, чтобы узнать, возможно ли это, но пока предположим, что это будет происходить в системе, где у пользователя есть полный доступ.

Ответы [ 6 ]

5 голосов
/ 18 мая 2011

Это не проблема кодирования C #, это проблема конфигурации системы. Настройте машину таким образом, чтобы пользователи имели обычные (не администраторские) учетные записи. Установите права доступа к файлам конфигурации, которые вас беспокоят, чтобы каждый (включая ваше приложение, работающее как текущий пользователь) мог читать файлы конфигурации, но только администратор мог писать файлы конфигурации. Наконец, не давайте пользователям пароль администратора. ;>

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

3 голосов
/ 18 мая 2011

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

В основном (псевдокод):

function isValidConfig(configPath, signaturePath) {
  return readFile(signaturePath) == SHA(readFile(configPath) + secret)
}

function writeConfig(contents, configPath, signaturePath) {
  writeFile(configPath, contents)
  writeFile(signaturePath, SHA(contents + secret))
}

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

1 голос
/ 21 мая 2011

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

.Net содержит эти функции в DSACryptoServiceProvider.VerifyHash

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

Действительно важный вопрос; что вы будете делать, когда приложение обнаружит измененный файл конфигурации?

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

1 голос
/ 18 мая 2011

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

1 голос
/ 18 мая 2011

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

0 голосов
/ 18 мая 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...