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:
|
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:
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