Ol√° amigos,

 

O desenvolvimento ASP.NET é inacreditavelmente fácil e rápido, todo o programador .NET sabe disso, mas há itens que devem ser levados em conta na hora de desenvolver, uma delas é a segurança. A segurança de uma aplicação não é uma etapa do desenvolvimento, ela faz parte de todo o processo. SQL Injection, Exceptions não tratadas e validação dos dados de entrada são itens importantes que devem ser levados em conta.

 

No meu trabalho, por exemplo, desenvolvemos todas as aplica√ß√£o em camadas, sempre levando em conta a seguran√ßa e a performance. No caso do banco de dados, quando a aplica√ß√£o est√° em fase de testes, acessa um banco s√≥ de teste, quando est√° em produ√ß√£o acessa outro. Mas essa mudan√ßa precisa ser flex√≠vel, para que n√£o seja preciso recompilar o c√≥digo ou fazer muita altera√ß√£o. A solu√ß√£o: configurar via web.config. Outra medida que sigo, criptografar a string de conex√£o. Mas como podemos fazer isso, voc√™ pergunta? √Č o que vamos ver a seguir.

 

O código abaixo foi feito em VB.NET 2.0

 

Primeiro vamos ver a connection string

 

<connectionStrings>

    <add name="TESTE" connectionString="Data Source=.\SQLEXPRESS;Integrated Security=True; User Instance=True;AttachDBFilename=|DataDirectory|\AspNetDB.mdf;"

      providerName="System.Data.SqlClient"/>

    <add name="PRODUCAO" connectionString="Data Source=SQL.NETITC.COM.BR; User ID=root; Password=teste123;"

      providerName="System.Data.SqlClient"/>

</connectionStrings>

 

Note que tenho duas strings de conexao, uma de teste, outra de produção. Vamos adicionar também uma appSetting, pra armazenar qual das strings iremos usar.

 

  <appSettings>

    <add key="UseBD" value="TESTE" />

  </appSettings>

 

Para usar usamos o seguinte código:

 

Imports System.Configuration

 

Public Class clConnection

 

    Public Function GetConnectionString() As String

        Dim UseDB As String = ConfigurationManager.AppSettings("UseDB")

        Return ConfigurationManager.ConnectionStrings(UseDB).ConnectionString

    End Function

 

End Class

 

 

Pronto, já vimos como usar uma string de conexão dinamicamente, agora vamos ver como configurar. Vamos criar uma pagina de configuração, pode ser da forma que você quiser, o que vai nos importar é o código:

 

Usar Banco de Dados:

 

    Protected Sub btnSalvar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSalvar.Click

        Dim config As Configuration = WebConfigurationManager.OpenWebConfiguration("~")

        Dim section As AppSettingsSection = config.AppSettings

 

        section.Settings("UseDB").Value = dplBanco.SelectedValue

        config.Save(ConfigurationSaveMode.Modified)

    End Sub

 

O código acima é simples, abrimos o arquivo de configuração, obtemos a AppSetting e modificamos o valor. dplBanco é o dropdownlist que possui dois valores, TESTE e PRODUCAO.

 

Agora, para criptografar a string de conexão, criamos mais um botão no form e atribuímos o seguinte código:

 

Usar Banco de Dados:

 

Protected Sub btnCripto_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnCripto.Click

    Dim config As Configuration = WebConfigurationManager.OpenWebConfiguration("~")

    Dim section As ConnectionStringsSection = config.ConnectionStrings

 

    If section.SectionInformation.IsProtected Then

        section.SectionInformation.UnprotectSection()

    Else

       section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider")

    End If

    config.Save(ConfigurationSaveMode.Modified)

End Sub

 

 

O resultado no Web.Config é o seguinte:

 

 <connectionStrings configProtectionProvider="DataProtectionConfigurationProvider">

  <EncryptedData>

   <CipherData>

    <CipherValue>AQAAANCMnd8BF...</CipherValue>

   </CipherData>

  </EncryptedData>

 </connectionStrings>

 

 

 

Lembre-se, sua função GetConnectionString não muda, ou seja, a função vai retornar a String de Conexão independente se estiver criptografada ou não.

 

Espero que tenha sido proveitoso para você. Estou sempre a disposição, mandem email para aguiar.fabio@gmail.com que ficarei feliz em responder.

 

Abraços