Я могу удалить информацию о пароле, если сначала преобразую байт [] в строку.
Я не понимаю, почему вы так думаете. если вы хотите удалить информацию о пароле, просто обновите ячейки byte[]
, которые содержат символы пароля. Например,
for (int i = start_of_password; i < end_of_password; i++) {
bytes[i] = 'X';
}
И если вам нужно извлечь пароль из byte[]
, вы можете поместить символы в другой byte[]
..., который затем вы сможете стереть после использования.
... но, насколько я знаю, преобразование пароля в строку никогда не является хорошей идеей (поскольку пароль будет храниться в пуле строк и, следовательно, это проблема безопасности).
Когда вы создаете Java String
из нескольких байтов (или вызывая new String(other_string)
), это НЕ помещает результирующую строку в пул строк. Строка, которую вы только что создали, является обычным объектом кучи. Если ваше приложение не хранит ссылку где-либо, оно может довольно быстро получить право на сборку мусора.
Существует только два обстоятельства, когда String
входит в пул строк:
-
, когда String
соответствует строковому литералу (или «константному выражению») в исходном коде, или
, когда что-то явно вызывает intern()
в String
object.
Еще одна вещь, которую следует учитывать, - почему долгоживущее String
в памяти может рассматриваться как проблема безопасности. Проблема в том, что существует риск, что «плохой парень» может получить пароль. Существует несколько потенциальных сценариев ios:
Если кто-то смог скомпрометировать JVM и внедрить в него плохой код (для JVM или уязвимости безопасности приложения), он мог бы извлечь строки. Это было бы действительно трудно достичь, хотя. Требуется много знаний о приложении и среде, в которой оно выполняется. На самом деле, извлечь пароль из byte[]
так же просто. В любом случае, исправлением для этого является поддержание вашей JVM в актуальном состоянии и проверка базы кода на наличие явных проблем безопасности, которые могут привести к взлому JVM.
Если кто-то может получить root доступ, они могут использовать это, чтобы прочитать память любого процесса. В простом случае они могут получить дамп ядра всего процесса. Но если они могут это сделать, они также могут незаметно изменить ваше приложение или платформу для регистрации паролей и их эксфильтрации. Решением этой проблемы является повышение безопасности вашей системы и процедур.
Если кто-то сможет получить физический доступ к вашему серверу, он может украсть диски dard и восстановить частичную копию JVM. память из области подкачки. Решение проблемы заключается в обеспечении надлежащей физической безопасности для ваших серверов.
Теперь все эти атаки правдоподобны, но в каждом случае есть либо простое смягчение ... или простое способ победить предосторожность "нет паролей в строках". Я бы посоветовал принять другие меры, прежде чем заняться этим вопросом.