En una aplicación cliente-servidor:¿Cómo enviar a la BD la contraseña de la aplicación del usuario?

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

Pregunta

Tengo una aplicación de escritorio Java que se conecta directamente con la base de datos (un Oracle).La aplicación tiene múltiples cuentas de usuario.¿Cuál es el método correcto para enviar la contraseña del usuario (no la contraseña de la base de datos) a través de la red?No quiero enviarlo en texto plano.

¿Fue útil?

Solución

Puede conectarse a través de una conexión de socket segura o codificar la contraseña localmente antes de enviarla a la base de datos (o mejor, ambas). Lo ideal es que la única vez que la contraseña exista en formato de texto sin formato sea antes del hash.Si puedes hacer todo eso del lado del cliente, más, mejor.

Otros consejos

Puede utilizar una conexión SSL entre el cliente Oracle y la base de datos Oracle.Para configurar SSL entre el cliente y el servidor de Oracle mediante JDBC:

Del lado del servidor:

1) En primer lugar, el oyente debe estar configurado para utilizar el protocolo TCPS:

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

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

Del lado del cliente:

1) los siguientes frascos deben ser classpathojdb14.jar, oraclepki.jar, ojpse.jar

2) La URL utilizada para la conexión debe ser:

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

3) Es necesario configurar las siguientes propiedades (ya sea como propiedad del sistema (opciones -D) o propiedades para la conexión)

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

Referencia: http://www.oracle.com/technology/tech/java/sqlj_jdbc/pdf/wp-oracle-jdbc_thin_ssl_2007.pdf

De acuerdo, nunca envíes la contraseña que el usuario eligió en texto plano.Sin embargo, a menos que utilices criptografía de clave pública, si les envías una contraseña por correo electrónico, estará en texto sin cifrar.Una cosa que he visto suceder a menudo es que cuando el usuario olvida la contraseña y solicita que se la envíe, el sistema genera una nueva contraseña y envía eso uno al usuario.Luego, el usuario puede cambiar la contraseña.

De esta manera, la contraseña que el usuario eligió (que el usuario podría usar en otro lugar) nunca se envía, mientras que su contraseña temporal se envía en texto sin formato; deberá cambiarla poco después.

Si no desea enviar los datos en texto plano, ¡¡¡use cifrado !!!

Utilice algún algoritmo de cifrado como AES, Twofish, etc.

También debes tener en cuenta dónde están tu cliente y tu servidor.Si ambos están en la misma máquina, no sirve de nada utilizar un cifrado.Si están en máquinas diferentes, utilice algún algoritmo de cifrado para enviar datos confidenciales.

Si USTED está verificando la validez de las contraseñas, puede simplemente enviar el hash de la contraseña.Tenga en cuenta que este método sólo funcionará si usted mismo compara la contraseña.Si alguna otra aplicación (fuera de su control) está realizando el trabajo de validación, no puede codificar la contraseña.

Si se conecta directamente a la base de datos sin una capa intermedia, debería considerar usar un usuario de base de datos para cada usuario real, porque de lo contrario no podrá asegurar realmente el acceso a la aplicación.

Si se conecta a Oracle con ORa*Net, la contraseña del usuario se cifra automáticamente (desde Oracle 8); sin embargo, en algunas situaciones puede recurrir a contraseñas no cifradas.Esto se puede desactivar con ORA_ENCRYPT_LOGIN=true en el entorno del cliente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top