Лучший подход для хранения конфиденциальных данных без использования базы данных или файла. xml - PullRequest
2 голосов
/ 25 апреля 2020

Я разрабатываю приложение в c#, которое использует файл. xml для получения информации, которая используется внутри логики c приложения. Когда запускается новая версия приложения, создается настройка (с использованием Inno Setup Compiler), и после успешной установки настройки. xml помещается в установочные файлы приложения. Этот файл. xml содержит около 200 объектов с 4 свойствами, каждый из которых содержит конфиденциальные данные.

Меня попросили запустить клиентскую версию приложения, и для этой версии требуется следующее: удалите доступ или манипулирование этим файлом. xml, поскольку он содержит конфиденциальные данные, которые клиент не должен видеть или манипулировать ими.

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

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

  2. Если нет, какой подход Вы предлагаете мне сделать? Или у меня нет вариантов, кроме как сделать это трудным путем?

Ответы [ 2 ]

3 голосов
/ 25 апреля 2020

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

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

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

2 голосов
/ 25 апреля 2020

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

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

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

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