martes, 10 de junio de 2008

ASP.NET - Encriptar el web.config - I

En el web.config guardamos información muy sensitiva, digamos la cadena de conexión a la base de datos, otras veces la lista de usuarios con que se puede acceder a la aplicación, y así sucesivamente... y obviamente debemos darle toda la seguridad del caso.

Ante este tipo de información hay que extremar la medidas de seguridad, si bien es cierto que desde el browser no es posible que te hurten la información del web.config, también es cierto que no es la única manera de que lo obtengan.
A través de FTP pueden descargarse sin problemas el web.config... y para ello sólo se necesita un descuido de tu parte.

La pregunta es: Cómo protejo mi web.config?
Hay varias formas... una de ellas puede ser tener un web.config que simplemente haga referencia a archivos de configuración externos (fuera del directorio virtual), estos archivos de configuración externos guardarán la información sensitiva de manera más segura. Este tema se ha abordado en
previos post.

Otra manera es encriptando la información sensitiva del web.config. Pareciera que esta tarea fuera muy difícil... nada de eso!!! es lo más simple del mundo, veamos:


Digamos que tienes una aplicación web llamada "Tests", ubicada en la siguiente ruta: G:\Inetpub\wwwroot\Tests
Y esta aplicación web guarda en su web.config esta cadena de conexión:








Vamos a empezar encriptando esta cadena de conexión, para eso hacemos lo sgte:

1.-Abrimos la línea de comandos y nos movemos de directorio, vamos a la carpeta v2.0.50727 (porque estamos trabajando con el framework 2.0 para adelante), así debe quedar:







2.- Ahí Escribimos
aspnet_regiis -pef "connectionStrings" "G:\Inetpub\wwwroot\Tests"

o
aspnet_regiis -pe "connectionStrings" -app "/Tests"
Hay que escribir "connectionStrings" tal como se ve... con S mayúscula, sino no reconocerá la orden.

Y presionamos enter, esta sentencia encriptará la sección "connectionStrings" del web.config
El resultado será algo similar a esto:














Si hubiéramos querido encriptar la sección appSettings del web.config... pues hacíamos igual que el ejemplo de arriba... sólo que reemplazábamos la palabra "connectionStrings" x "appSettings".


Nota: la operación de encriptar el web.config se debe realizar sobre la misma máquina de producción... ya que si encriptas el webconfig en una PC y luego la subes encriptada a otra PC: No funcionará... porque el algoritmo de encriptación usa algunos identficadores únicos de la PC para el encriptado... lo cual impedirá que se pueda leer desde otra PC.

Para recuperar la cadena de conexión no hay que hacer magia... no hay que decriptar nada, leyeron?? repito: no hay que decriptar nada... el framework lo hará por nosotros de manera automática... entonces para recuperar la cadena de conexión simplemente hacemos esto:




Esto tiene para rato... la seguimos en el próximo post:
Encriptar el web.config II

8 comentarios:

Unknown dijo...

Debo felicitarte segundo, por que tu blog es excelente, tiene tips muy buenos para cuando uno programa. Creo que deberia estar mas arriba en las busquedas, es una lastima que nadie comente tus posts, por que la verdad son muy utiles.

saludos grandes,
desde bs.as y estamos en contacto,
Fernando.

Segundo Serrano dijo...

Gracias por tus palabras Fernando,

pero realmente sí comentan los posts, tal vez no con la frecuencia y cantidad que quisiera... pero igual seguiré compartiendo lo que sé.

Estamos en contacto.

Unknown dijo...

De nada, a mi me parecio excelente tu blog, muy util y claro con sus ejemplos :)

Segundo usas gtalk ??? ya que estoy incursinando en el mundo de asp.net y me gustaria hacerte algunas consultas ... el mio es: fernandogermanoliva@gmail.com

saludos :)

Segundo Serrano dijo...

Fernando,

sinceramente, no lo uso amigo...
si tienes consultas puedes hacerlas desde el post correspondiente.

Saludos

Unknown dijo...

claro entiendo y alguna via de email a la cual yo pueda mandarte alguna duda puntual del codigo? desde ya muchas gracias segundo

efenix dijo...

HOla, con este post aprendi a encriptar partes de mi web.config

pero tengo una duda, yo encripto mi web.config en mi pc y luego lo subo al servidor, como hago para que el servidor decripte los valores del web.config

saludos.

efenix dijo...

Haaa! orale,no habia visto la segunda parte.
yo estoy en la misma situacion que juanito jajajaj

gracias fue de gran ayuda.

Segundo Serrano dijo...

Saludos efenix ;)