2012-06-27 10 views
8

No me refiero a las contraseñas que no tienen que ser utilizados (tales como contraseñas de otros usuarios a mi sitio - en cuyo caso realmente hacer no tienen almacenarlos Ver https://stackoverflow.com/a/1054069/939213..) así que simplemente almacenar hashes no es una opción.¿Cuál es la mejor manera de almacenar una contraseña o clave privada en un host web?

Me refiero a almacenar contraseñas en una base de datos SQL y una clave privada que el software en el servidor compartido tiene que usar.

Supongo que no hay realmente manera segura de hacerlo. Solo quiero saber qué es el mejor en esta situación.

Estoy tratando de mantenerlos seguros de los piratas informáticos (en el mismo host web o no). No de otros que tienen permiso para ver los archivos.

Es el código ASP.Net que los va a usar.

+0

¿Qué otros usos apropiados hay para una contraseña además de la verificación? ¿Para qué más se usa una contraseña? –

+0

¿La mejor manera? Es ** ** no almacenar esa información ... no almacene la contraseña per se - almacene un hash salado de ella. –

+0

¿De quién estás tratando de proteger esta información? la clave de su web.config será * secure * del público, pero no de los que tienen acceso al archivo y/o la base de datos. con toda probabilidad, tendrá que determinar qué nivel de acceso a esta información es apropiado – Didaxis

Respuesta

1

Windows ofrece la API de protección de datos (DPAPI) específicamente para este propósito. Consulte la clase ProtectedData para consumirla de .NET.

La ventaja de DPAPI es que sus datos confidenciales se cifran en función de la credencial de inicio de sesión del usuario de Windows, lo que significa que es segura a menos que su cuenta de Windows esté en peligro.

3

La mejor manera de almacenar la contraseña es no almacenarla. Use la autenticación integrada (Windows) para conectarse a SQL Server. Esto implica ejecutar su grupo de aplicaciones IIS como usuario específico (Windows) y granting that user access para iniciar sesión en la base de datos y ejecutar las consultas necesarias.

Ver también SQL Server Integrated Authentication Mode

Aparte de ser más seguro, tiene un mejor rendimiento. El uso de cadenas de conexión por usuario frustra la agrupación de conexiones.

EDIT:

Si es absolutamente necesario almacenar la contraseña, a continuación, utilizando Encrypted Connection Strings en ASP.NET es el camino a seguir. Esto se encarga de usar DPAPI para almacenar la cadena de conexión y la clave de la máquina correctamente, reduciendo la posibilidad de que la arruine y piense que la ha asegurado cuando no lo ha hecho.

también: Encrypting Connection String in web.config

+0

-1. No es realmente una respuesta en mi opinión. OP está específicamente pidiendo una forma de _store_ la contraseña. –

+0

En el contexto de la seguridad, sí.Si me preguntas cuál es la mejor manera de evitar morir en un accidente aéreo, la respuesta "no volar a ninguna parte" parece razonable. La respuesta * correcta * es la que di; debe usar autenticación integrada siempre que sea posible. El OP no dijo que Integrated no era una opción. –

+0

Pero si necesita volar, elegirá la forma más segura. El software en el sitio tiene que usar esas cosas. – ispiro

Cuestiones relacionadas