首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使敏感的存储卡数据的java.io.BufferedOutputStream安全的内存刮板?

如何使敏感的存储卡数据的java.io.BufferedOutputStream安全的内存刮板?
EN

Stack Overflow用户
提问于 2016-07-19 03:53:55
回答 1查看 385关注 0票数 6

在PA-DSS审计过程中,在运行信用卡支付事务之后,在我们的服务器端代码(过程内存转储)中发现了信用卡号。

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

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

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

代码语言:javascript
复制
   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;
     }
   }

这实际上起作用了,我在内存转储中找不到CC数据,但我觉得这不是正确的解决方案(自定义更改java核心类)。

有什么建议我可以用一种不同的方式解决这个问题(不需要修改任何库代码)?

EN

回答 1

Stack Overflow用户

发布于 2016-11-14 04:16:27

Java允许您在“不必更改任何库代码”的情况下扩展库。您可以扩展BufferedOutputStream来生成SecureBufferedOutputStream,它将在刷新之后和垃圾收集之前将缓冲区的内容清零(以防您的JVM实现尚未将垃圾收集的内存清零)。

代码语言:javascript
复制
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Arrays;

public class SecureBufferedOutputStream extends BufferedOutputStream {

    public SecureBufferedOutputStream(OutputStream out) {
        super(out);
    }

    public SecureBufferedOutputStream(OutputStream out, int size) {
        super(out, size);
    }

    @Override
    public synchronized void flush() throws IOException {
        super.flush();
        Arrays.fill(buf, (byte) 0);
    }

    @Override
    protected void finalize() throws Throwable {
        super.finalize();
        Arrays.fill(buf, (byte) 0);
    }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38444953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档