Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a: .NET Framework
.NET
.NET Standard
Em versões anteriores do ADO.NET, a verificação em tempo de compilação das cadeias de ligação com valores de cadeia concatenados não ocorria, de modo que, em tempo de execução, uma palavra-chave incorreta gerava um ArgumentException. O Microsoft SqlClient Data Provider para SQL Server inclui a classe Microsoft.Data.SqlClient.SqlConnectionStringBuilder connection string builder que herda de DbConnectionStringBuilder.
Ataques de injeção de cadeia de conexão
Um ataque de injeção de cadeia de conexão pode ocorrer quando a concatenação dinâmica de cadeia de caracteres é usada para criar cadeias de conexão baseadas na entrada do usuário. Se a sequência não for validada e os caracteres ou texto malicioso não forem escapados, um atacante pode potencialmente aceder a dados sensíveis ou a outros recursos no servidor. Por exemplo, um atacante pode montar um ataque inserindo um ponto e vírgula e acrescentando outro valor. A cadeia de ligação é analisada usando um algoritmo "o último vence", e a entrada hostil é substituída por um valor legítimo.
As classes do construtor de cadeias de conexão são projetadas para eliminar suposições e proteger contra erros de sintaxe e vulnerabilidades de segurança. Fornecem métodos e propriedades correspondentes aos pares chave/valor conhecidos permitidos pelo fornecedor de dados. Cada classe mantém uma coleção fixa de sinônimos e pode traduzir de um sinônimo para o nome de chave bem conhecido correspondente. São feitas verificações para pares chave/valor válidos e um par inválido lança uma exceção. Além disso, os valores injetados são tratados de forma segura.
O exemplo seguinte demonstra como o SqlConnectionStringBuilder lida com um valor extra inserido para a configuração Initial Catalog.
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
builder.DataSource = "(local)";
builder.IntegratedSecurity = true;
builder.InitialCatalog = "AdventureWorks;NewValue=Bad";
Console.WriteLine(builder.ConnectionString);
A saída mostra que o SqlConnectionStringBuilder tratou disso corretamente ao escapar o valor extra entre aspas duplas em vez de o adicionar à string de conexão como um novo par chave/valor.
data source=(local);Integrated Security=True;
initial catalog="AdventureWorks;NewValue=Bad"
Criar cadeias de conexão a partir de arquivos de configuração
Se certos elementos de uma cadeia de ligação forem conhecidos de antemão, podem ser armazenados num ficheiro de configuração e recuperados em tempo de execução para construir uma cadeia de ligação completa. Por exemplo, o nome do banco de dados pode ser conhecido antecipadamente, mas não o nome do servidor. Ou pode querer que o utilizador forneça um nome e uma palavra-passe em tempo de execução sem a possibilidade de injetar outros valores na cadeia de ligação.
Um dos construtores sobrecarregados para um construtor de cadeia de conexão usa um String como um argumento, que permite fornecer uma cadeia de conexão parcial que pode ser concluída a partir da entrada do usuário. A cadeia de ligação parcial pode ser armazenada num ficheiro de configuração e recuperada em tempo de execução.
Observação
O System.Configuration espaço de nomes permite acesso programático a ficheiros de configuração que utilizam o WebConfigurationManager para aplicações Web e o ConfigurationManager para aplicações Windows. Para obter mais informações sobre como trabalhar com cadeias de conexão e arquivos de configuração, consulte Cadeias de conexão e arquivos de configuração.
Example
Este exemplo demonstra como recuperar uma string de conexão parcial de um ficheiro de configuração e completá-la definindo as DataSource, UserID e Password propriedades de SqlConnectionStringBuilder. O ficheiro de configuração é definido da seguinte forma.
<connectionStrings>
<clear/>
<add name="partialConnectString"
connectionString="Initial Catalog=Northwind;"
providerName="Microsoft.Data.SqlClient" />
</connectionStrings>
Observação
Tens de definir uma referência para o System.Configuration.dll no teu projeto para que o código seja executado.
private static void BuildConnectionString(string dataSource,
string userName, string userPassword)
{
// Retrieve the partial connection string named databaseConnection
// from the application's app.config or web.config file.
ConnectionStringSettings settings =
ConfigurationManager.ConnectionStrings["partialConnectString"];
if (null != settings)
{
// Retrieve the partial connection string.
string connectString = settings.ConnectionString;
Console.WriteLine("Original: {0}", connectString);
// Create a new SqlConnectionStringBuilder based on the
// partial connection string retrieved from the config file.
SqlConnectionStringBuilder builder =
new SqlConnectionStringBuilder(connectString);
// Supply the additional values.
builder.DataSource = dataSource;
builder.UserID = userName;
builder.Password = userPassword;
Console.WriteLine("Modified: {0}", builder.ConnectionString);
}
}