Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Nas primeiras versões do ADO.NET, a verificação em tempo de compilação de cadeias de conexão com valores de cadeia de caracteres concatenados não ocorreu, de modo que, em runtime, uma palavra-chave incorreta gerava uma ArgumentException. Cada provedor de dados do .NET Framework dava suporte a diferentes tipos de sintaxe de palavras-chave de cadeias de conexão, o que dificultava a construção de cadeias de conexão válidas manualmente. Para resolver esse problema, o ADO.NET 2.0 introduziu novos construtores de cadeias de conexão para cada provedor de dados .NET Framework. Cada provedor de dados inclui uma classe fortemente tipada para construir cadeias de conexão que herda de DbConnectionStringBuilder. A tabela a seguir lista os provedores de dados do .NET Framework e suas respectivas classes de construtores de cadeias de conexão.
Ataques de injeção da cadeia de conexão
Um ataque de injeção de cadeia de conexão pode ocorrer quando a concatenação de cadeias dinâmicas é usada para criar cadeias de conexão com base na entrada do usuário. Se a cadeia de caracteres não for validada e o texto ou caracteres maliciosos não forem escapados, um invasor poderá acessar potencialmente dados confidenciais ou outros recursos no servidor. Por exemplo, um invasor poderia montar um ataque fornecendo um ponto e vírgula e acrescentando um valor adicional. A cadeia de conexão é analisada usando o algoritmo "o último vence", e a entrada hostil é substituída por um valor legítimo.
As classes de construtores de cadeias de conexão são criadas para eliminar hipóteses e proteger contra erros de sintaxe e vulnerabilidades à segurança. Elas fornecem métodos e propriedades que correspondem a pares chave-valor conhecidos e permitidos por cada provedor de dados. Cada classe mantém uma coleção fixa de sinônimos e pode converter um sinônimo no nome da chave conhecida correspondente. São realizadas verificações de pares chave/valor válidos e um par inválido gera uma exceção. Além disso, os valores injetados são tratados de maneira segura.
O exemplo a seguir demonstra como SqlConnectionStringBuilder manipula um valor extra inserido para a configuração Initial Catalog.
Dim builder As New System.Data.SqlClient.SqlConnectionStringBuilder
builder("Data Source") = "(local)"
builder("Integrated Security") = True
builder("Initial Catalog") = "AdventureWorks;NewValue=Bad"
Console.WriteLine(builder.ConnectionString)
System.Data.SqlClient.SqlConnectionStringBuilder builder =
new System.Data.SqlClient.SqlConnectionStringBuilder();
builder["Data Source"] = "(local)";
builder["integrated Security"] = true;
builder["Initial Catalog"] = "AdventureWorks;NewValue=Bad";
Console.WriteLine(builder.ConnectionString);
Importante
A Microsoft recomenda usar o fluxo de autenticação mais seguro disponível. Se você estiver se conectando ao SQL do Azure, as Identidades gerenciadas para recursos do Azure é o método de autenticação recomendado.
A saída mostra que SqlConnectionStringBuilder tratou isso corretamente, escapando o valor adicional com aspas duplas, em vez de adicioná-lo à cadeia de conexão como um novo par chave/valor.
data source=(local);Integrated Security=True;
initial catalog="AdventureWorks;NewValue=Bad"
Montar cadeias de conexão a partir de arquivos de configuração
Se determinados elementos de uma cadeia de conexão forem conhecidos com antecedência, eles poderão ser armazenados em um arquivo de configuração e recuperados em runtime para construir uma cadeia de conexão completa. Por exemplo, o nome do banco de dados pode ser conhecido com antecedência, mas não o nome do servidor.
Um dos construtores sobrecarregados de um construtor de cadeias de conexão recebe um String como argumento, permitindo fornecer uma cadeia de conexão parcial que pode ser completada com a entrada do usuário. A cadeia de conexão parcial pode ser armazenada em um arquivo de configuração e recuperada em runtime.
Observação
O System.Configuration namespace permite acesso programático aos arquivos de configuração que usam WebConfigurationManager para aplicativos Web e ConfigurationManager para aplicativos do Windows. Para saber mais sobre como trabalhar com cadeias de conexão e arquivos de configuração, confira Cadeias de conexão e arquivos de configuração.