В клиент-серверном приложении: Как отправить в БД пароль приложения пользователя? - PullRequest
2 голосов
/ 16 сентября 2008

У меня есть настольное Java-приложение, которое напрямую соединяется с БД (Oracle). Приложение имеет несколько учетных записей пользователей. Как правильно отправить пароль пользователя (не пароль БД) по сети? Я не хочу отправлять его в виде простого текста

Ответы [ 5 ]

5 голосов
/ 16 сентября 2008

Вы можете подключиться через безопасное сокетное соединение или хешировать пароль локально перед отправкой его в базу данных (или лучше, оба) - в идеале, единственный раз, когда пароль должен существовать в виде простого текста, - это до хеширования. Если вы можете сделать все это на стороне клиента, чем больше, тем лучше.

4 голосов
/ 16 сентября 2008

Вы можете использовать SSL-соединение между клиентом Oracle и базой данных Oracle. Чтобы настроить SSL между клиентом и сервером oracle с помощью JDBC:

На стороне сервера:

1) Прежде всего, слушатель должен быть настроен на использование протокола TCPS:

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

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

На стороне клиента:

1) следующие банки должны быть classpath ojdb14.jar, oraclepki.jar, ojpse.jar

2) URL, используемый для подключения, должен быть:

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

3) Необходимо установить следующие свойства (либо как свойство системы (опции -D), либо как свойства для соединения)

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

Ссылка: http://www.oracle.com/technology/tech/java/sqlj_jdbc/pdf/wp-oracle-jdbc_thin_ssl_2007.pdf

2 голосов
/ 16 сентября 2008

Согласен, никогда не отправляйте пароль, выбранный пользователем, в текстовом виде. Однако, если не использовать криптографию с открытым ключом, если вы отправите им пароль по электронной почте, он будет в открытом тексте. Часто случается так, что когда пользователь забывает пароль и запрашивает его отправку, система генерирует новый пароль и отправляет этот один пользователю. Затем пользователь может изменить пароль.

Таким образом, выбранный пользователем пароль (который пользователь может использовать в другом месте) никогда не отправляется, в то время как его временный пароль отправляется в виде открытого текста, они должны изменить его вскоре после этого.

0 голосов
/ 16 сентября 2008

Если вы подключаетесь напрямую к БД без промежуточного уровня, вам следует рассмотреть возможность использования пользователя БД для каждого реального пользователя, потому что в противном случае вы не сможете реально защитить доступ к приложению.

Если вы подключаетесь к Oracle с помощью ORa * Net, пароль пользователя автоматически шифруется (начиная с Oracle 8), однако в некоторых случаях он может использовать незашифрованные пароли. Это можно отключить с помощью ORA_ENCRYPT_LOGIN=true в среде клиента.

0 голосов
/ 16 сентября 2008

Если вы не хотите отправлять данные в виде простого текста, используйте шифрование !!!

Используйте некоторый алгоритм шифрования, такой как AES, Twofish и т. Д.

Вы также должны учитывать, где находятся ваш клиент и сервер. Если они оба находятся на одном компьютере, использование шифрования не имеет смысла. Если они находятся на разных компьютерах, используйте некоторый алгоритм шифрования для отправки конфиденциальных данных.

Если вы проверяете действительность паролей, вы можете просто отправить хэш пароля. Помните, что этот метод будет работать, только если вы сами сравниваете пароль. Если какое-либо другое приложение (вне вашего контроля) выполняет задание проверки, вы не можете хэшировать пароль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...