小编amb*_*oni的帖子

如何使java.io.BufferedOutputStream为敏感卡数据的内存刮刀安全?

在PA-DSS审核过程中,在运行信用卡付款交易后,在我们的服务器端代码(进程内存转储)中发现了信用卡号.

我最初尝试在支付交易结束时调用JVM垃圾收集器,因为我们的变量是本地的,以解决这个问题.但是仍有一个实例指的是内存转储中的信用卡(CC).这个CC字符串(实际上是一个byte [])被SOAP CXF客户端对象引用,该对象使用内部sun.net.www.protocol.https.HttpsClient,最终使用BufferedOutputStream对象.

查看BufferedOutputStream的代码我注意到私有flushBuffer()方法只是将count变量设置为零而不重置内部byte []数组.

在常规应用程序的代码中没有问题(只是重置计数变量更简单和有效),但这在我们的安全审计过程中引发了一个标志,所以我的替代方案是创建一个自定义java.io.BufferedOutputStream,它将重置为零这个字节数组然后我需要在tomcat引导类路径中添加此文件.

   private void flushBuffer() throws IOException {
     if (count > 0) {
        out.write(buf, 0, count);

        //NEW - Custom code to reset buffer
        for (int i = 0; i < count; i++) {
            buf[i] = 0;
        }
        //End custom code

        count = 0;
     }
   }
Run Code Online (Sandbox Code Playgroud)

这实际上工作,我在内存转储中找不到CC数据,但我不认为这是正确的解决方案(java核心类的自定义更改).

有任何建议我如何以不同的方式解决这个问题(不需要更改任何库代码)?

java security cxf

5
推荐指数
1
解决办法
287
查看次数

标签 统计

cxf ×1

java ×1

security ×1