!Registra tu dominio ya!


Respuesta
  #1 (permalink)  
Antiguo 27-May-2010, 10:16
JehrDa
Guest
 
Mensajes: n/a
Predeterminado Encriptar Cadena de Conexión C#

Hola a todos, éste es la primera parte de este tema, de cómo mantener segura nuestra cadena de conexión, y asi evitar accesos de terceros a nuestra base de datos, lo cual sería muy peligroso para cualquier caso, ya que se podrían modificar o eliminar infromación importante.

1º Ubicación de la cadena de conexión

La pregunta es ¿Dónde pongo la cadena de conexión a mi base de datos?

Bueno seguramente muchos lo ponen en el código mismo, directamente o en una clase aparte, todo esta bien, y de hecho funciona correctamente, pero por motivos de seguridad no sería muy recomendable hacerlo, ¿Porqué?, una vez compilado tu aplicación y generados los archivos dlls es posible desensamblar estos y ver el código que está oculto dentro, este tema lo trataremos en otro hilo, por ahora nos interesa la seguridad de nuestra cadena de conexión.

Para nuestro caso lo recomendable sería colocar la cadena en un archivo XML aparte, si la aplicación es de escritorio en el App.config (Application Configuration File), y si es web en el Web.config, ambos archivos podemos generarlos haciendo click derecho sobre el proyecto, add new Application Configuration File, cuyo nombre por defecto es App.config

Vemos que se agrega un archivo asi:

Código PHP:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
</configuration>
Bien ahora ponemos nuestra cadena de conexión aquí , iniciamos una etiqueta de nombre <connectionStrings>
Código PHP:
<connectionStrings>
<
add name="Conexion"
connectionString="data source = SQLServer; initial catalog = TuBasedeDatos; persist security info = True; Integrated Security = False; user id = 'usuario';password='contraseña';packet size= 4096; Pooling=true; Max Pool Size=10;" />
</
connectionStrings
Listo, y ahora como recuperamos esta cadena para usarla en el código?

Desde la aplicación tenemos que usar la libreria:

using System.Configuration;

y para recuperar desde el archivo App.config, por ejemplo en un string

String cadenaConexion = ConfigurationManager.ConnectionStrings["Conexion"].ConnectionString;

Y Tenemos nuestra cadena de conexión lista para usarla...
Responder Citando
  #2 (permalink)  
Antiguo 01-Jun-2010, 10:15
JehrDa
Guest
 
Mensajes: n/a
Predeterminado Encriptar Cadena de Conexión C# parte 2

Hola de nuevo, continuando con el tema procedemos ahora si a encriptar nuestra cadena, en el enlace siguiente se explica un poco de como hacerlo:

Encriptar la cadena de conexión - h@nz …el Geek

Como se dice en el artículo, esta encriptación sólo nos permite encriptar nuestra cadena en el equipo en el que instalamos nuestro sistema, pero imaginemos hacer esto siempre , un poco tedioso no?, en especial si se tratá de un sistema que trabaja en red. Es por esta razón que investigando un poco encontré una forma de hacerlo directamente al momento mismo de la instalación.

Para esto nos ayudaremos de la clase "Installer Class", la cual controla los eventos durante la instalación del sistema, más información se puede encontrar aqui:

Installer (Clase) (System.Configuration.Install)

Bien, entonces lo que hacemos es agregar una clase Installer en nuestro proyecto:
Add, New Item, Installer Class

Vamos al código de la clase presionando F7 y a continuación tenemos:

Código PHP:
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;
using System.Linq;
 
 
namespace TuSolucion.TuProyecto
{
[
RunInstaller(true)]
public 
partial class Installer2 Installer
{
public 
Installer2()
{
InitializeComponent();
}
}

Ahora agregamos dos procedimientos a la clase, una heredada y la otra privada.
El Procedimiento heredado es el de Install, la misma que se ejecuta durante la instalación, y la redefinimos asi:
Código PHP:
public override void Install(IDictionary stateSaver)
{
base.Install(stateSaver);
//get Protected Configuration Provider name from custom action parameter
string sectionName this.Context.Parameters["sectionName"];
//get Protected Configuration Provider name from custom action parameter
string provName this.Context.Parameters["provName"];
// get the exe path from the default context parameters
string exeFilePath this.Context.Parameters["assemblypath"];
//encrypt the configuration section
ProtectSection(sectionNameprovNameexeFilePath);

Y ahora el módulo ProtectSection, la cual se encarga de encriptar nuestra cadena de conexión

Código PHP:
// Mdulo que encripta la cadena de conexin al instalar la aplicacin
private void ProtectSection(string sectionNamestring provNamestring exeFilePath)
{
Configuration config ConfigurationManager.OpenExeConfiguration(exeFilePath);
ConfigurationSection section config.GetSection(sectionName);
if (!
section.SectionInformation.IsProtected)
{
//Protecting the specified section with the specified provider
section.SectionInformation.ProtectSection(provName);
}
section.SectionInformation.ForceSave true;
config.Save(ConfigurationSaveMode.Modified);

Listo tenemos nuestra clase Installer lista, pero olvidamos un detalle:
Recuerdan nuestro archivo App.config?, bueno aqui tenemos que agregar unas cuantas líneas que usará el encriptador:

Código PHP:
<configProtectedData>
<
providers>
<
add useMachineProtection="true" name="DPAPIProtection"
type="System.Configuration.DpapiProtectedConfigurationProvider,System.Configuration,&#xD;&#xA; Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
/>
</
providers>
</
configProtectedData
Ahora si podemos está todo listo...
Responder Citando
  #3 (permalink)  
Antiguo 04-Jun-2010, 09:44
JehrDa
Guest
 
Mensajes: n/a
Predeterminado Encriptar Cadena de Conexión C# continuación

Ya tenemos entonces nuestra clase installer, redefinida para que realice la acción de encriptación durante la instalación, ahora creamos nuestro proyecto de instalación, y enseguida vamos a la opción "Custom Actions" asi:



Y luego agregamos uno nuevo:



y elegimos el archivo de instalacion:



Finalmente en propiedades en Custom Action agregamos el siguiente comando:



Y Ejecutamos el proyecto.
Eso es todo ya tenemos nuestra cadena de conexión a encriptarse durante la instalación de nuestro proyecto en cualquier equipo.
Responder Citando
  #4 (permalink)  
Antiguo 05-Aug-2010, 09:28
Ana
Guest
 
Mensajes: n/a
Thumbs up

Cita:
Iniciado por jehrda Ver Mensaje
ya tenemos entonces nuestra clase installer, redefinida para que realice la acción de encriptación durante la instalación, ahora creamos nuestro proyecto de instalación, y enseguida vamos a la opción "custom actions" asi:



y luego agregamos uno nuevo:



y elegimos el archivo de instalacion:



finalmente en propiedades en custom action agregamos el siguiente comando:



y ejecutamos el proyecto.
Eso es todo ya tenemos nuestra cadena de conexión a encriptarse durante la instalación de nuestro proyecto en cualquier equipo.

Hola, muy bien tu articulo solo que hay un detalle , no se ven las imagenes que pusiste para lo del "custom action" solo se ve una, no tendrás toda la explicacion que pusiste en un archivo o algo así?.

Y otra duda... cuando agrego la clase Installer :
public partial class Installer2 : Installer
{
public Installer2()
{
InitializeComponent();
}
}
}
}
Ime marca un error , me dice que la clase base (Installer) es menos accesible que la clase Installer2, faltará ponerle algo más a la case?

Gracias por tu ayuda...
Responder Citando
  #5 (permalink)  
Antiguo 05-Aug-2010, 09:57
Ana
Guest
 
Mensajes: n/a
Predeterminado

Cita:
Iniciado por Ana Ver Mensaje
Hola, muy bien tu articulo solo que hay un detalle , no se ven las imagenes que pusiste para lo del "custom action" solo se ve una, no tendrás toda la explicacion que pusiste en un archivo o algo así?.

Y otra duda... cuando agrego la clase Installer :
public partial class Installer2 : Installer
{
public Installer2()
{
InitializeComponent();
}
}
}
}
Ime marca un error , me dice que la clase base (Installer) es menos accesible que la clase Installer2, faltará ponerle algo más a la case?

Gracias por tu ayuda...
Hola de nuevo, lo del error que me marcaba era por que al agregar la clase Installer le cambié el nombre después en el código.

Pero bueno, solo serían las imáginas que no se ven, te lo agradecería mucho .
Responder Citando
  #6 (permalink)  
Antiguo 07-Aug-2010, 04:48
JehrDa
Guest
 
Mensajes: n/a
Predeterminado Encriptar Cadena de Conexion C#

Hola Ana, y disculpa por la demora, bueno respecto al tamaño de las imágenese, si tienes razón, están muy pequeñas asi que prometo mejorarlas , mientras tanto, puedes hacerle click en cada imagen y se abrirá una ventana en la cuál pudes ver estas en un tamaño mucho mayor.

Para aclararte un poco lo del custom action, lo que hacemos es agregarle una nueva acción al proyecto durante la instalación, ésta acción es la que definimos en la clase Installer, para esto como habrás visto, sólo agregamos un nuevo Custom Action en la acción Install, y entre las propiedades de éste, en "CustomActionData" ponemos el sgte comando:

/sectionName = "connectionStrings" /provName="DPAPIProtection"

Saludos y si tienes alguna duda me avisas.
Responder Citando
  #7 (permalink)  
Antiguo 09-Aug-2010, 10:19
Ana
Guest
 
Mensajes: n/a
Predeterminado

Cita:
Iniciado por JehrDa Ver Mensaje
Hola Ana, y disculpa por la demora, bueno respecto al tamaño de las imágenese, si tienes razón, están muy pequeñas asi que prometo mejorarlas , mientras tanto, puedes hacerle click en cada imagen y se abrirá una ventana en la cuál pudes ver estas en un tamaño mucho mayor.

Para aclararte un poco lo del custom action, lo que hacemos es agregarle una nueva acción al proyecto durante la instalación, ésta acción es la que definimos en la clase Installer, para esto como habrás visto, sólo agregamos un nuevo Custom Action en la acción Install, y entre las propiedades de éste, en "CustomActionData" ponemos el sgte comando:

/sectionName = "connectionStrings" /provName="DPAPIProtection"

Saludos y si tienes alguna duda me avisas.

Hola JehrDa,
Voy a revisar la info que me escribiste, y te comento.


Gracias!!
Responder Citando
 
Respuesta

Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder mensajes
No puedes subir archivos adjuntos
No puedes editar tus mensajes

Los Códigos BB están Activado
Las Caritas están Activado
[IMG] está Activado
El Código HTML está Desactivado
Trackbacks are Activado
Pingbacks are Activado
Refbacks are Activado