0

我将 JBoss Web 服务用于支付服务应用程序。在某些时候,我需要对支付服务提供商进行远程 SOAP 调用,并且需要使用用户名令牌进行身份验证。

我知道如何使用 JBossWS 执行此操作的唯一方法是这样的:

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

但这里的问题是“changeme”密码现在作为字符串对象在内存中,我无法控制何时(如果有的话)它会被垃圾收集。如果攻击者此时转储内存,他可以找到凭据。

是否有另一种使用 JBossWS 进行安全 SOAP 调用的方法,我可以在其中控制密码在内存中的保留时间?

4

1 回答 1

0

我很确定没有办法。字符串在 Java 中是不可变的,因此您将无法重写字符串。您可以使用字节数组来存储密码,并且可以重写该字节数组。但是无论如何,您可能不得不在某个时候将其转换为字符串...

另一方面,如果攻击者有足够的权限访问您的机器以获取内存转储,那么您无论如何都会被搞砸。如果攻击者已经拥有这么多的访问权限,他几乎可以为所欲为……

于 2009-04-30T06:57:06.657 回答