Em um aplicativo cliente-servidor:Como enviar para o banco de dados a senha da aplicação do usuário?

StackOverflow https://stackoverflow.com/questions/70170

Pergunta

Eu tenho um aplicativo Java desktop que se conecta diretamente ao banco de dados (um Oracle).O aplicativo possui várias contas de usuário.Qual é o método correto para enviar a senha do usuário (não a senha do banco de dados) pela rede?Não quero enviar em texto simples

Foi útil?

Solução

Você pode se conectar por meio de uma conexão de soquete segura ou fazer o hash da senha localmente antes de enviá-la ao banco de dados (ou melhor, ambos). - Idealmente, o único momento em que a senha deve existir em formato de texto simples é antes do hash.Se você puder fazer tudo isso do lado do cliente, quanto mais, melhor.

Outras dicas

Você pode usar a conexão SSL entre o cliente Oracle e o banco de dados Oracle.Para configurar SSL entre cliente e servidor Oracle usando JDBC:

No lado do servidor:

1) Primeiramente, o listener deve estar configurado para utilizar o protocolo TCPS:

LISTENER = (ADDRESS_LIST= (ADDRESS=(PROTOCOL=tcps)(HOST=servername)(PORT=2484)))

WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/server/wallet/path/)))

Do lado do cliente:

1) os seguintes jars precisam ser classpathojdb14.jar, oraclepki.jar, ojpse.jar

2) O URL usado para conexão deve ser:

jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=servername)(PORT=2484))(CONNECT_DATA=(SERVICE_NAME=servicename)))

3) As seguintes propriedades precisam ser definidas (como propriedade do sistema (opções -D) ou propriedades para conexão)

javax.net.ssl.trustStore, 
javax.net.ssl.trustStoreType, 
javax.net.ssl.trustStorePassword

Referência: http://www.oracle.com/technology/tech/java/sqlj_jdbc/pdf/wp-oracle-jdbc_thin_ssl_2007.pdf

Concordo, nunca envie a senha que o usuário escolheu em texto simples.No entanto, sem usar criptografia de chave pública, se você enviar uma senha por e-mail, ela estará em texto não criptografado.Uma coisa que tenho visto acontecer com frequência é que quando o usuário esquece a senha e solicita que ela seja enviada para ele, o sistema gera uma nova senha e envia que um para o usuário.O usuário pode então alterar a senha.

Dessa forma, a senha escolhida pelo usuário (que o usuário poderá utilizar em outro lugar) nunca é enviada, enquanto a senha temporária é enviada em texto simples, devendo alterá-la logo em seguida.

Caso não queira enviar os dados em texto simples, use criptografia!!!

Use algum algoritmo de criptografia como AES, Twofish etc.

Você também deve levar em consideração onde estão seu cliente e servidor.Se ambos estiverem na mesma máquina, não adianta usar criptografia.Se estiverem em máquinas diferentes, use algum algoritmo de criptografia para enviar dados confidenciais.

Se VOCÊ estiver verificando a validade das senhas, basta enviar o hash da senha.Esteja ciente de que este método funcionará apenas se você mesmo estiver comparando a senha.Se algum outro aplicativo (fora do seu controle) estiver fazendo o trabalho de validação, você não poderá fazer o hash da senha.

Se você se conectar diretamente ao banco de dados sem camada intermediária, considere usar um usuário do banco de dados para cada usuário real, caso contrário você não poderá realmente proteger o acesso do aplicativo.

Se você se conectar ao Oracle com ORa*Net, a senha do usuário será criptografada automaticamente (desde o Oracle 8), porém poderá recorrer a senhas não criptografadas em algumas situações.Isso pode ser desativado com ORA_ENCRYPT_LOGIN=true no ambiente do cliente.

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