c # защитить строку подключения к базе данных в настройках предотвратить декомпиляцию? - PullRequest
4 голосов
/ 04 января 2012

Можно ли как-нибудь запретить людям использовать Reflector.net для декомпиляции моего приложения .exe c #? Я знаю, что есть множество сообщений об этом, но мне все равно, увидят ли люди мой код, единственное, что я хочу «скрыть», - это строка подключения к моей базе данных.

В настоящее время я использую «Настройки» в моем c #, чтобы сохранить информацию о соединении с базой данных. Я хотел знать, не помешает ли использование этой строки в настройках моего проекта людям увидеть ее?

Я использую DotFuscator в visual studio 2008, но я слышал, что это не мешает людям декомпилировать мою программу.

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

Ответы [ 4 ]

5 голосов
/ 04 января 2012

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

Если вы не хотите, чтобы ваши пользователи знали ваши учетные данные для входа в БД, не давайте свои учетные данные для входа в БД пользователям . Это единственный способ.

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

4 голосов
/ 04 января 2012

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

0 голосов
/ 04 января 2012

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

Не используйте прямое подключение к базе данных из вашей программы, если только пользовательдоверяют использовать базу данных напрямую с теми же привилегиями.Между ними должен быть сервис (веб-сервис, REST-сервис и т. Д.), Который вы размещаете на своем собственном сервере.В Linux могут размещаться сервисы любого из упомянутых мною типов (используйте Mono , если вы хотите их в .NET в Linux)

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

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

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

0 голосов
/ 04 января 2012

Посмотрите это руководство на эту конкретную тему из MSDN. Имейте в виду, однако, что это только сдвигает безопасность сожгли. Теперь вам нужно управлять безопасностью ключа

...