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