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

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

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

但问题在于“改变”是指“改变”。密码现在作为String对象在内存中,我无法控制何时,如果有的话,它将被垃圾收集。如果攻击者此时转储内存,他可以找到凭据。

有没有其他方法可以使用JBossWS进行安全的SOAP调用,在那里我可以控制密码在内存中的保留时间?

有帮助吗?

解决方案

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

另一方面,如果攻击者能够访问您的计算机以获取内存转储,那么无论如何攻击者都会被搞砸。如果攻击者已经拥有那么多访问权限,那么他可以做任何他想做的事情......

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top