Использование массива char вместо String - PullRequest
0 голосов
/ 24 сентября 2019

У нас есть рекомендация по безопасности использовать массив символов вместо строки при сохранении пароля, а затем очистить массив символов.Но проблема в том, что некоторые банки принимают строку в качестве аргумента.

Например, org.apache.http.auth.UsernamePasswordCredentials требуется два строковых аргумента;Один для пароля и один для имени пользователя.Теперь, как мне вызвать эту функцию, не создавая строку для пароля

httpClient.getCredentialsProvider().setCredentials(
                new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT),
                new UsernamePasswordCredentials(user.getUsername(), new String(user
                        .getPassword())));

Как мне решить эту проблему.Есть ли способ, где я могу хранить пароль.Я понимаю, что String является неизменным и не рекомендуется хранить пароли в String.Так что я могу сделать альтернативой

1 Ответ

0 голосов
/ 24 сентября 2019

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

С массивом вы можете явно стереть данные после того, как с ним покончено.Вы можете перезаписать массив чем угодно, и пароль не будет нигде в системе, даже до сборки мусора.

Посмотрел org.apache.http.auth.UsernamePasswordCredentials , а UsernamePasswordCredentials поддерживает только String.Поэтому потенциально я бы просто сохранил пароль в виде массива char согласно вашей рекомендации по безопасности, а затем просто преобразовал бы его в String при вызове этого класса.Затем, если вы параноик, избавьтесь от класса, как только закончите, и сразу же запустите GC (это может привести к увеличению использования памяти).

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

...