Как скрыть пароль базы данных?
Я использую JPA2.0 (Eclipselink) для взаимодействия с БД, и у меня есть persistence.xml
файл, который имеет некоторую конфигурацию БД. Я хочу скрыть пароль, используемый для доступа к БД. Я использую Eclipse IDE. Следующие теги конфигурации используются в persistence.xml
файл.
<property name="javax.persistence.jdbc.user" value="app"/>
<property name="javax.persistence.jdbc.password" value="password"/>
Я не хочу упоминать пароль здесь, в xml
, Как мне это сделать?
Примечание. Мое приложение состоит из Swing и встроенной БД Apache Derby.
2 ответа
Вы можете позволить серверу хранить пароль, а затем вы можете восстановить его, используя JNDI
,
Также было бы возможно зашифровать пароль и расшифровать в клиенте. Хотя это может быть восприимчиво к атакам по словарю или даже полностью изменить процесс путем декомпиляции вашей программы.
Обычно в этом сценарии вы сохраняете хеш в файле XML, а в бэкэнде проверяете, совпадают ли хэши.
Вы должны быть в состоянии сделать что-то вроде следующего псевдокода:
String password = property.getParam(password);
String user = property.getParam(user);
function validateHash(String unhashedPassword, String unhashedUser)
{
String passHash = generateMD5(unhashedPassword);
String userHash = generateMD5(unhashedUser);
if(!password.equals(passHash) && !user.equals(userHash)
{
throw new SecurityException("Oh noez hackstar");
}
}
Дискуссия о том, какой алгоритм хеширования использовать, является длительной, в MD5 нет ничего плохого, если вы не пытаетесь защитить ядерные коды запуска.