Как стереть пароли из памяти при использовании токенов имени пользователя с JBossWS?

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

Вопрос

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

Единственный известный мне способ сделать это с помощью JBossWS выглядит так:

Map<String, Object> requestContext = ((BindingProvider)port).getRequestContext();
requestContext.put(BindingProvider.USERNAME_PROPERTY, "foobar");
requestContext.put(BindingProvider.PASSWORD_PROPERTY, "changeme");

Но проблема здесь в том, что пароль «changeme» ​​теперь находится в памяти как объект String, и я не могу контролировать, когда он будет удален, если вообще когда-либо, будет собран мусором.Если на этом этапе злоумышленник сбросит память, он сможет найти учетные данные.

Есть ли другой способ совершать безопасные вызовы SOAP с помощью JBossWS, где я могу контролировать, как долго пароль остается в памяти?

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

Решение

Я почти уверен, что способа нет.Строки в Java неизменяемы, поэтому вы не сможете переписать строку.Вы можете использовать массив байтов для хранения пароля, и этот массив байтов можно переписать.Но вам, вероятно, в какой-то момент все равно придется преобразовать его в строку...

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

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