2016-12-29 3 views
5

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

Как я могу хранить эти данные безопасным способом?

код Источник:

private void Initialize() 
{ 
    server = "xxx"; 
    database = "xxx"; 
    uid = "xxx"; 
    password = "xxx"; 
    string connectionString; 
    connectionString = "SERVER=" + server + ";" + "DATABASE=" + 
    database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";"; 

    connection = new MySqlConnection(connectionString); 
} 
+1

Опираясь на местную безопасность, это не является безопасностью. Если вы дистанционно размещаете базу данных, к которой подключаются несколько изолированных конечных пользователей, вы должны предоставить ее через веб-службу (API), а не предоставлять пользователям прямой доступ к базе данных. Независимо от любой локальной безопасности, которую вы используете, по-прежнему можно получить строку подключения обратно. Даже пароль, вероятно, будет доступен путем отражения. Это связано с соединениями MS SQL. – john

+1

Я предпочитаю хранить эти данные в web.config или app.config и убедиться, что они зашифрованы. пожалуйста, проверьте этот пост. Http: // StackOverflow.com/questions/10168240/encrypting-decrypting-a-string-in-c-sharp –

+1

И если веб-служба (API) недоступна, вы можете как минимум шифровать конфиденциальные данные. Его все еще можно получить, но, по крайней мере, не для всех. – Vladimir

ответ

3

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

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

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

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


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

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

+0

Для запуска веб-службы мне понадобится сервер Windows вместо сервера linux? – user7347727

+0

Вы также можете использовать Linux. Моно может разместить веб-службу. – john

3

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

aspnet_regiis -pe "connectionStrings" -app "/SampleApplication" 

Вам нужно будет предоставить доступ к приложению использовать ключ для расшифровки этого, когда он работает, см MSDN article on secure connection strings.

+0

Это работает для настольных приложений? – john

Смежные вопросы