martes, 11 de octubre de 2011

SecureString - Almacenar contraseñas en memoria de forma segura en .net.

En mi caso y espero que no sea su caso (por lo de la contraseña), al desarrollar las aplicaciones que se conectarán a una base de datos me gusta tener una clase que me administre la conexión a la Base de Datos y todos los campos que ésta necesita (incluyendo la contraseña de acceso).  Para evitar almacenar la contraseña en memoria en un tipo string podemos utilizar SecureString [System.Security.SecureString].

Uno de los puntos importantes es que SecureString implementa CriticalFinalizerObject, lo cual significa que SecureString se considera una Región de ejecución restringida (Constrained Ejecution Region - CER) lo que significa que las excepciones de tipo out-of-band estan prohibidas en regiones de tipo CER por lo que evitamos que cierta parte del código no se ejecute (con el fin de liberar de memoria el objeto SecureString llamando la función Dispose()). Se debe tener en cuenta que SecureString se mantiene en una región no administrada de la memoria, por lo que es nuestra responsabilidad liberar ese recurso.

Nota: Considera que no tiene caso almacenar una contraseña o cualquier dato sensible en un  string y pasarlo como parámetro para agregarlo a un objeto SecureString si no eliminamos de memoria ese string inmediatamente despues de utilizarlo.

Utilizar SecureString.

una de las formas en que podemos utilizar SecureString en combinación con las propiedades (get & set):

En mi caso marqué la propiedad get como privada para accesar únicamente desde la misma clase.
 Es importante volver a decir que no debemos almacenar permanentemente una copia de la contraseña en memoria.




No hay comentarios:

Publicar un comentario