Pergunta

Na minha aplicação winforms eu estou hash da string de conexão em nível local.

Mas aqui um par de perguntas.

Depois de meu aplicativo decodifica a string de conexão, as informações seqüência de conexão é enviada em texto simples? E desde que meu aplicativo é instalado localmente o homem no meio pode ser qualquer usuário?

Como posso proteger a cadeia de conexão, becides a opção "forçar criptografia", que requer um certificado extra?

Foi útil?

Solução

Você tem apenas uma quantidade limitada de abordagens aqui no que diz respeito a manter a sua conexão segura corda e seguro.

Uma opção, se a seqüência de conexão é armazenado dentro de um arquivo web.config ou app.config (para web e aplicativos Windows, respectivamente) você pode criptografar o valor. Aqui está um par de links que detalhe como que pode ser feito:

Encrypting Web.Config Valores em ASP.NET 2.0

Criptografar cadeias de conexão no VS 2005 arquivos .config

Claro que, como você diz, com razão, isso pode não alcançar a segurança que você deseja, desde que o aplicativo pode muito bem estar em execução no computador do usuário e, portanto, o arquivo app.config (mesmo em um estado criptografado) e associado chaves de encriptação / desencriptação também estará disponível na máquina do usuário. Um usuário experiente e empreendedora poderia, então, ter acesso à sua seqüência de conexão "texto simples".

IMHO, uma das melhores maneiras de impedir que seus usuários vejam sua seqüência de conexão do banco de dados é a de nunca dar a eles, em primeiro lugar, criptografados ou não. Isso exigiria que o seu aplicativo Windows Forms não falar diretamente com um banco de dados (usando uma seqüência de conexão), mas sim iria falar diretamente com (por exemplo) um serviço web.

Claro, você daria as janelas formulário de candidatura uma URL com os quais possa aceder ao serviço web, mas o uso, em seguida, deste serviço web seria restrito e controlado, permitindo apenas o acesso com uma combinação nome de usuário / senha do usuário específico.

Desta forma, você pode hospedar o serviço web (não tem que ser um web serviço - que poderia ser um aplicativo remoto que a aplicação do formulário janelas iria comunicar com mais de . comunicação remota NET ou WCF ) em um servidor / máquina fisicamente separado que você do tem controle completo sobre e proteger esta máquina com perímetro segurança.

Seria os aplicativos e serviços que você tem em execução nesta máquina segura que têm acesso a string de conexão do banco de dados, e essa necessidade seqüência de conexão nunca será fora divulgado na sociedade do perímetro desta máquina, mantendo assim completamente seguro (supondo o perímetro de segurança acima mencionado está no lugar e é eficaz).

É claro, implementar tudo isso quase certamente médios grandes mudanças arquitetônicas para a sua aplicação, o que, dependendo do tamanho e natureza da sua aplicação, pode ou não valer a pena, no entanto, a única maneira de realmente proteger sua conexão corda de um usuário (ou uma máquina do usuário) é para garantir que ele nunca está disponível (em formato criptografado ou descriptografado) para o usuário (ou máquina do usuário).

Assim que você colocar a seqüência de conexão na máquina do usuário, mesmo em um estado criptografado, você precisa dar essa mesma máquina que a capacidade para descriptografar que seqüência de conexão criptografada, e não é o elo mais fraco na cadeia eo ponto em que (a um usuário de recursos) pode ser determinada a cadeia de ligação de texto simples. Você poderia off-carregar a descriptografia da seqüência de conexão criptografada para outra máquina (seguro), mas isso é apenas uma variação do mecanismo de cliente-servidor anteriormente mencionado pelo qual a parte que é mantida em segurança (chave de decodificação, seqüência de conexão etc.) é realizada em uma máquina diferente sob seu próprio controle seguro.

Outras dicas

Você não pode proteger a cadeia de conexão. o que você pode fazer é conectar via SSL canal seguro.

Esta página na MSDN descreve como implementar SSL para a conexão:

http://support.microsoft.com/kb/316898

E este descreve autenticação SQL (para ASP.NET):

http://msdn.microsoft.com/en-us/library/ ff648340.aspx

Parece que você realmente só precisa criptografar o nome de usuário e senha? Nesse caso, a Autenticação do Windows deve ser uma opção (embora eu muitas vezes têm problemas de fazê-la funcionar para mim)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top