Как стереть пароли из памяти при использовании токенов имени пользователя с JBossWS? - PullRequest
0 голосов
/ 30 апреля 2009

Я использую JBoss Web Services для приложения платежного сервиса. В какой-то момент мне нужно сделать удаленные 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, где я могу контролировать, как долго пароль остается в памяти?

1 Ответ

0 голосов
/ 30 апреля 2009

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

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

...