Proteja as informações de conexão
Proteger o acesso à sua fonte de dados é um dos objetivos mais importantes ao proteger um aplicativo. Uma cadeia de conexão apresenta uma vulnerabilidade potencial se não estiver protegida. Armazenar informações de conexão em texto simples ou mantê-las na memória corre o risco de comprometer todo o sistema. As cadeias de conexão incorporadas no código-fonte podem ser lidas usando o Ildasm.exe (IL Disassembler) para exibir a linguagem intermediária comum (CIL) em um assembly compilado.
Vulnerabilidades de segurança envolvendo cadeias de conexão podem surgir com base no tipo de autenticação usado, como as cadeias de conexão são persistidas na memória e no disco e as técnicas usadas para construí-las em tempo de execução.
Importante
A Microsoft recomenda que você use 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 serão o método de autenticação recomendado.
Utilizar Autenticação do Windows
Para ajudar a limitar o acesso à sua fonte de dados, você deve proteger as informações de conexão, como ID de usuário, senha e nome da fonte de dados. Para evitar a exposição de informações do usuário, recomendamos o uso da autenticação do Windows (às vezes chamada de segurança integrada) para fontes de dados locais. (No entanto, ao conectar-se ao Azure SQL, você deve usar Identidades gerenciadas para recursos do Azure.) A autenticação do Windows é especificada em uma cadeia de conexão usando as Integrated Security
palavras-chave ou Trusted_Connection
, eliminando a necessidade de usar um ID de usuário e senha. Ao usar a autenticação do Windows, os usuários são autenticados pelo Windows e o acesso aos recursos do servidor e do banco de dados é determinado pela concessão de permissões a usuários e grupos do Windows.
Para situações em que não é possível usar a autenticação do Windows, você deve ter cuidado extra porque as credenciais do usuário são expostas na cadeia de conexão. Em um aplicativo ASP.NET, você pode configurar uma conta do Windows como uma identidade fixa que é usada para se conectar a bancos de dados e outros recursos de rede. Você habilita a representação no elemento identity no arquivo web.config e especifica um nome de usuário e senha.
<identity impersonate="true"
userName="MyDomain\UserAccount"
password="*****" />
A conta de identidade fixa deve ser uma conta de baixo privilégio à qual foram concedidas apenas as permissões necessárias no banco de dados. Além disso, você deve criptografar o arquivo de configuração para que o nome de usuário e a senha não sejam expostos em texto não criptografado.
Importante
A Microsoft recomenda que você use o fluxo de autenticação mais seguro disponível. O fluxo de autenticação descrito neste procedimento requer um grau muito alto de confiança no aplicativo e acarreta riscos que não estão presentes em outros fluxos. Você só deve usar esse fluxo quando outros fluxos mais seguros, como identidades gerenciadas, não forem viáveis.
Não use arquivos UDL (Universal Data Link)
Evite armazenar cadeias de conexão para um OleDbConnection em um arquivo UDL (Universal Data Link). As UDLs são armazenadas em texto não criptografado e não podem ser criptografadas. Um arquivo UDL é um recurso externo baseado em arquivo para seu aplicativo e não pode ser protegido ou criptografado usando o .NET Framework.
Evite ataques de injeção com construtores de cadeias 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 com base na entrada do usuário. Se a entrada do usuário não for validada e o texto ou caracteres mal-intencionados não forem escapados, um invasor poderá acessar dados confidenciais ou outros recursos no servidor. Para resolver esse problema, o ADO.NET 2.0 introduziu novas classes de construtor de cadeia de conexão para validar a sintaxe da cadeia de conexão e garantir que parâmetros adicionais não sejam introduzidos. Para obter mais informações, consulte Construtores de cadeias de conexão.
Utilizar o comando Persist Security Info=False
O valor padrão para Persist Security Info
é false, recomendamos usar esse padrão em todas as cadeias de conexão. Configuração Persist Security Info
ou true
yes
permite que informações confidenciais de segurança, incluindo o ID de usuário e a senha, sejam obtidas de uma conexão depois que ela for aberta. Quando Persist Security Info
definido como false
ou no
, as informações de segurança são descartadas depois de serem usadas para abrir a conexão, garantindo que uma fonte não confiável não tenha acesso a informações confidenciais de segurança.
Criptografar arquivos de configuração
Você também pode armazenar cadeias de conexão em arquivos de configuração, o que elimina a necessidade de incorporá-las no código do seu aplicativo. Os arquivos de configuração são arquivos XML padrão para os quais o .NET Framework definiu um conjunto comum de elementos. As cadeias de conexão em arquivos de configuração geralmente são armazenadas dentro do <elemento connectionStrings> no app.config para um aplicativo do Windows ou no arquivo web.config para um aplicativo ASP.NET. Para obter mais informações sobre os conceitos básicos de armazenamento, recuperação e criptografia de cadeias de conexão de arquivos de configuração, consulte Cadeias de conexão e arquivos de configuração.