2011-09-28 37 views
12

tengo la siguiente cadena de conexión:¿Cómo puedo ocultar mi contraseña en mi cadena de conexión C#?

Data Source=Paul-HP\MYDB;Initial Catalog=MyMSDBSQL;Persist Security Info=True;User ID=sa;Password=password 

(.net servicio web) Obviamente, esto puede ser visto simplemente abriendo el archivo app.config y mirando a los ajustes de configuración.

Lo que necesito es una forma de que un pirata informático no pueda ver la contraseña. Pero, al mismo tiempo, déjelo personalizable para que pueda modificarse cuando se despliegue en otra base de datos.

Respuesta

13

usted tiene un número de opciones - los que yo sepa (en orden de preferencia):

  1. uso integrado de seguridad (SSPI) en el que no es necesario incluir una contraseña en la configuración presentar
  2. Cifrar la cadena de conexión (ver Encrypting Configuration Information Using Protected Configuration)
  3. tienda el nombre de usuario y contraseña por separado y utilizar el formato de cadenas para construir la cadena de conexión completa,

Así que para ejemplo, la cadena de conexión podría tener este aspecto:

Data Source=Paul-HP\MYDB;Initial Catalog=MyMSDBSQL;Persist Security Info=True;User ID={0};Password={1} 

me gustaría ir a la opción 1, si eso no es posible, entonces la opción 2. He opción 3 para la integridad de mencionar.

¿Has leído Protecting Connection Information (ADO.NET)?

+0

Sugerencia 2 se ve bien para un punto de vista estático, pero ninguna de las soluciones proporcionadas (por nadie) permite la personalización de la cadena de conexión después de la compilación? Aunque estoy adivinando esto, no es posible, ya que eso requiere que ingresen un texto claro, que es lo que evita la inscripción. P.s ¿por qué editas todo pero no haces ningún cambio? – Doomsknight

+1

@Doomsknight [Acabo de eliminar la firma de "gracias" al final de su publicación] (http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed- from-posts) – Justin

+0

Si desea personalizar la cadena de conexión, tal vez la opción 3 podría ser útil: puede cifrar la contraseña (y opcionalmente el nombre de usuario) por separado. – Justin

1

Usted puede cifrar la cadena de conexión - a continuación, cuando se accede a la cadena de conexión, descifrarlo. Sin embargo, esto no es a prueba de tontos, ya que entonces estás atascado con el problema de dónde almacenar la clave para descifrar la cadena de conexión.

6

Antes que nada, no use la cuenta "SA". Deja su base de datos abierta si alguien obtiene la contraseña. Use una cuenta personalizada que solo tiene permiso para realizar operaciones CRUD en una base de datos específica.

La única forma de obtener web.config es piratear su servidor. Y si lo han hecho, estás jodido de todos modos.

+2

por precisar el motivo abajo votos para que tenga la oportunidad de mejorar mi respuesta. – jgauffin

+2

Espera pero ... ¡esta respuesta en realidad no responde la pregunta de chicos! (No es que haya votado negativamente) – Justin

+2

No he votado negativamente tu respuesta, pero hay muchas otras posibilidades para obtener la contraseña de la web.config no solo para hackear un servidor, por ejemplo, algunos virus pueden atraparlo desde la máquina de desarrollo local antes de la implementación, u otros casos. No importa cómo ... la pregunta es cómo cifrar la contraseña y tiene sentido porque la regla principal con respecto a la propección de contraseñas: 'nunca la guarde en texto sin formato' – sll

1

I Sugerir/descifrar la cadena de conexión. Por lo tanto, la cadena de conexión debe establecerse manualmente.

Para el cifrado echar un vistazo a: http://dotnet-snippets.de/dns/encrypt-and-decrypt-strings-SID205.aspx

para los parámetros de echar un vistazo a: http://msdn.microsoft.com/en-us/library/8eyb2ct1.aspx

Vuelva a colocar la cifra con la correcta en tiempo de ejecución:

public static void SetAppSettingValue(string Key, string Value) 
    { 

    System.Configuration.Configuration config == ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
// Add an Application Setting. 

config.AppSettings.Settings[Key].Value = Value; 

    // Save the changes in App.config file. 

    config.Save(ConfigurationSaveMode.Modified); 

    ConfigurationManager.RefreshSection("appSettings"); 
    } 
Cuestiones relacionadas