В клиент-серверном приложении:Как отправить в БД пароль приложения пользователя?

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

Вопрос

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

Это было полезно?

Решение

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

Другие советы

Вы можете использовать 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) следующие банки должны быть путем к классам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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top