zonas tienen seguridad implementación habilitar configuración coincidentes aplicación c# visual-studio-2008 security

c# - tienen - habilitar configuración de seguridad de clickonce



Maneras de poner una contraseña en el código (5)

Tengo un poco de código que necesita ejecutarse con privilegios elevados (más de lo que quiero que corra el resto de mi código).

Tengo mi código que configura el funcionamiento de Suplantación, pero requiere un nombre de usuario, dominio y contraseña. Como mi código está en C # .net, sé que la contraseña puede ser encontrada por cualquier persona que esté suficientemente determinada.

¿Hay alguna forma de encriptar la contraseña en mi código? ¿O de otra manera proteger esta contraseña y aún así poder pasarla?

Aquí está el código que estoy llamando:

using (new Impersonator("UserNameGoesHere", "DomainNameGoesGere", "Password Goes Here")) { uint output; NetUserAdd(AUTHENTICATION_SERVER, 1, ref userinfo, out output); return output; }

Me encantaría un ejemplo que muestre cómo solucionar esto para no mostrar mi contraseña en texto plano.

Estoy usando Visual Studio 2008, .NET 3.5 SP1 y ejecutándome en Windows Server 2003.



Tienes múltiples opciones aquí.

  1. Puede hash la contraseña la primera vez y almacenar el hash en un archivo. Ahora, la próxima vez, si desea ejecutar el código con privilegios elevados, debe aceptar / volver a escribir la contraseña y volver a calcular el hash e igualarlo con el hash almacenado. Solo si coincide, ejecutarás tu código en modos de elevación. Podría hash usando SHA. Consulte el espacio de nombres de System.Crytography para ver ejemplos sobre hash.

  2. La segunda opción es encriptar la contraseña usando algoritmos como AES. Sin embargo, deberá tener una clave para hacerlo y deberá preocuparse por la seguridad de esta clave.

  3. La tercera opción es usar DPAPI y cifrar la contraseña, pero no preocuparse por la seguridad de las claves, una opción mucho más fácil que 2.

Yo recomendaría 1 si no le importa volver a ingresar la contraseña cada vez que se inicia la aplicación. Si eso no es una posibilidad, sugeriría ir con 3 y usar DPAPI.

Aquí hay algunos enlaces para que comiences.

1. http://www.obviex.com/samples/dpapi.aspx 2. http://www.obviex.com/samples/Encryption.aspx


Vaccano,

Recomendaría investigar la API de protección de datos (DPAPI) por lo que está intentando lograr. Se considera parte de la solución en muchos enfoques de mejores prácticas para almacenar de forma reversible las contraseñas que necesitan las aplicaciones.

Un buen artículo sobre el DPAPI (y otras técnicas + inquietudes) se puede encontrar aquí:

http://msdn.microsoft.com/en-us/magazine/cc164054.aspx

Con C # 2.0, P / Invocar no es necesario; envolturas administradas existen:

http://blogs.freshlogicstudios.com/Posts/View.aspx?Id=41ca5a99-ddc0-4d0a-9919-2ce10bf50c7e

¡Espero que esto ayude!


Puede usar el paquete nuget de configuración segura. Internamente, utiliza la API de protección de datos para cifrar y descifrar datos.

//Save some configuration data at folder data/temp/ var configManager = new ConfigManager() .WithOptions(DataProtectionScope.CurrentUser) .Set("password", "my-massword") .AtFolder(@"data/temp/") .Save(); ... //Load configuration data var loadedValue = new ConfigManager() .AtFolder(@"data/temp/") .Load() .Get<string>("password");