jueves, 24 de febrero de 2011

Encriptar ConnectionString (app.config o web.config)

La cadena de conexión o connection string es parte importante de toda aplicación, dado que mediante ésta se logra la comunicación entre la base de datos y los métodos de acceso a datos de la aplicación.
Sin embargo, más allá de su concepto, deberíamos tener varias consideraciones al momento de su creación, debido a que se podrían exponer datos confidenciales que servirían de información para usuarios malintencionados o hackers que quieran atacar a nuestra aplicación.
Basándonos en el ejemplo del post de “Desarrollo de Aplicación en Capas con Visual Studio 2008“, nos damos cuenta que una de las posibles formas de utilizar el ConnectionString es en el código que forma nuestros métodos de acceso a datos. Tal y como lo mencioné en dicho post, esa no es la forma más adecuada de llevar a cabo esta tarea.
Una de las buenas prácticas es almacenar el ConnectionString en un archivo “App.config” (en aplicaciones cliente/servidor) o “Web.config” (en aplicaciones web) que forme parte de nuestra solución. En caso de que se esté programando en capas, dicho archivo de configuración deberá estar en el proyecto más externo, por lo general, en el proyecto de “Presentación”, a pesar de que luego se utilice en los métodos de acceso a datos. Esto facilitará la interacción con dicha cadena de conexión, dado que posteriormente podremos invocarla desde cualquier parte del código sin tener que reescribirla.
Sin embargo, esto no elimina el problema de exposición de datos confidenciales, para lo cual usaremos elData Access Application Block del Enterprise Library v4.1, el cual forma parte de Microsoft Patterns & Practices y puede ser descargado de manera gratuita, y luego de su instalación podrá ser usado como una extensión más de Visual Studio.
Para lograr encriptar nuestra ConnectionString debemos seguir esta serie de pasos:
1) Añadir el archivo “App.config” o “Web.config” al proyecto de “Presentación”.
2) Hacer click derecho sobre el “App.config”, y luego en “Edit Enterprise Library Configuration”.
EditEnterpriseLibrary
3) Agregamos el Data Access Application Block.
Agregar Data Access
4) Agregar sección de Connection String.
Agregar seccion ConnString
5) Agregar nueva ConnectionString.
Agregar connectionString
6) Seleccionamos el nombre del ConnectionString.
nombre ConnectionString
7) Modificar las propiedades del ConnectionString.
propiedadesConnString
8 ) Hacemos click en Data Access Application Block y, en el cuadro de Propiedades, en la sección Protection, en ProtectionProvider seleccionamos: RsaProtectedConfigurationProvider.
ProtectionProvider
Por último, guardamos los cambios realizados al archivo “App.config” o “Web.config”, lo cerramos, y volvemos a abrir de manera tradicional (en xml) y veremos los cambios realizados: almacenada y encriptada la ConnectionString.
connString encriptada
Para terminar, luego podremos hacer uso de dicho ConnectionString de la siguiente manera:
cSharp_EntLib
De esta manera, terminamos usando un alias, denominado “prueba” en este caso, que no otorga ningún tipo de información relevante a un posible hacker, al tiempo que encriptamos la cadena de conexión en el archivo que la aloja.

4 comentarios:

  1. Una consulta, que pasa si aplico esta encriptación a mi appconfig y tengo mi setup para instalar el programa en otras pc, como le haria para modificar la cadena de conexión dado que otras pcs tendrian otro datasource?.
    Sin encriptación normalmente en la carpeta donde se ha instalado mi programa abro el appconfig con un bloc de notas y cambio el datasource para que el programa pueda conectarse a la base de datos.

    ResponderEliminar
    Respuestas
    1. Este método de encriptación es ideal para websites, sin embargo en aplicaciones de escritorio, surge el problema que indicas. Una posible opción que tienes es la de generar un script en el setup que te encripte el datasource después de instalar con la firma del cliente

      Eliminar
    2. Ok gracias por el tip.
      Saludos.

      Eliminar
  2. Este comentario ha sido eliminado por el autor.

    ResponderEliminar