Pergunta

Na aplicação web que estou desenvolvendo atualmente uso uma solução ingênua ao conectar ao banco de dados:

Connection c = DriverManager.getConnection("url", "username", "password");

Isso é muito inseguro.Se um invasor obtiver acesso ao código-fonte, ele também obterá acesso ao próprio banco de dados.Como meu aplicativo da web pode se conectar ao banco de dados sem armazenar a senha do banco de dados em texto simples no código-fonte?

Foi útil?

Solução

Você pode armazenar a cadeia de conexão no arquivo Web.config ou App.config e criptografar a seção que a contém.Aqui está um artigo muito bom que usei em um projeto anterior para criptografar a string de conexão:

http://www.ondotnet.com/pub/a/dotnet/2005/02/15/encryptingconnstring.html

Outras dicas

No .NET, a convenção é armazenar strings de conexão em um arquivo de configuração separado.

Aí, o arquivo de configuração pode ser criptografado.

Se você estiver usando o Microsoft SQL Server, tudo isso se tornará irrelevante se você usar uma conta de domínio para executar o aplicativo, que então usará uma conexão confiável com o banco de dados.A string de conexão não conterá nenhum nome de usuário e senha nesse caso.

Posso recomendar estas técnicas para programadores .NET:

  • Criptografar senha\string de conexão no arquivo de configuração
  • Configure uma conexão confiável entre cliente e servidor (ou seja,usar autenticação do Windows, etc.)

Aqui estão artigos úteis do CodeProject:

A menos que eu esteja perdendo o ponto, a conexão deve ser gerenciada pelo servidor por meio de um pool de conexões; portanto, as credenciais de conexão são mantidas pelo servidor e não pelo aplicativo.

Levando isso adiante, geralmente construo uma convenção em que o aplicativo web front-end (em uma DMZ) apenas se comunica com o banco de dados por meio de um serviço web (no domínio), fornecendo, portanto, separação completa e segurança aprimorada do banco de dados.

Além disso, nunca dê privilégios à conta do banco de dados além do que é essencialmente necessário.

Uma abordagem alternativa é executar todas as operações por meio de procedimentos armazenados e conceder ao usuário do aplicativo acesso apenas a esses processos.

Supondo que você esteja usando o MS SQL, você pode aproveitar as vantagens da autenticação do Windows, que não requer nome de usuário/senha em nenhum lugar do código-fonte.Caso contrário, eu teria que concordar com os outros postadores que recomendam app.config + criptografia.

  1. Crie um usuário de sistema operacional
  2. Coloque a senha em uma variável de ambiente O/S para esse usuário
  3. Execute o programa como esse usuário

Vantagens:

  1. Somente root ou esse usuário pode visualizar as variáveis ​​de ambiente de sistema operacional desse usuário
  2. Sobrevive à reinicialização
  3. Você nunca verifica acidentalmente a senha no controle de origem
  4. Você não precisa se preocupar em estragar as permissões de arquivo
  5. Você não precisa se preocupar com onde armazena uma chave de criptografia
  6. Funciona na plataforma x
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top