Защита доступа к базе данных приложения на ПК пользователя - PullRequest
0 голосов
/ 30 июня 2010

Привет!

Мне нужно развернуть компактную базу данных с приложением, над которым я работаю.База данных действует как кэш для данных, которые приложение уже просматривало, и эти данные никогда не изменятся, поэтому кэшированные значения никогда не устаревают.Я выбрал SQLite и пишу на C #.

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

Есть какие-нибудь предложения о том, как этого добиться или что-то близкое?Люди делали что-то подобное в прошлом?

Спасибо!

Ответы [ 3 ]

4 голосов
/ 30 июня 2010

Безопасность от неясности.

Если ваши приложения могут ее расшифровать, то и ваш пользователь может сделать это тоже.

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

1 голос
/ 30 июня 2010

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

Все, что вы можете сделать, это усложнить им задачу.

0 голосов
/ 30 июня 2010

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

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

Допустим, у вас есть эта таблица, хранящаяся в базе данных вашего сервера (не в базе данных клиента!)

RealAccountNumber   ClientOnlyAccountNumber
981723              ABC123
129847              BCD234
923857              CDE345
...

Таким образом, клиент видит только номера учетных записей в столбце ClientOnlyAccountNumber, и когда клиент отправляет на сервер запрос на выполнение действия с учетной записью «ABC123», сервер знает, как преобразовать это в номер счета 981723.

...