Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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 cadeia de ligação 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 de um construtor de cadeias de ligação aceita um String como argumento, o que lhe permite fornecer uma cadeia de ligação parcial que pode depois ser completada a partir da entrada do utilizador. 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);
}
}