Trong quá trình kiểm tra PA-DSS, nó đã được tìm thấy số thẻ tín dụng trong mã phía máy chủ của chúng tôi (quá trình xử lý bộ nhớ) sau khi chạy một giao dịch thanh toán bằng thẻ tín dụng.Làm thế nào để làm cho java.io.BufferedOutputStream được bảo mật cho bộ nhớ scraper cho dữ liệu thẻ nhạy cảm?
Tôi đã thử ban đầu chỉ cần gọi bộ thu gom rác JVM ở cuối giao dịch thanh toán vì các biến của chúng tôi là cục bộ để giải quyết vấn đề này. Nhưng vẫn còn một trường hợp duy nhất đề cập đến một thẻ tín dụng (CC) trong bộ nhớ dump. Chuỗi CC này (thực ra nó là một byte []) đã được tham chiếu bởi đối tượng máy khách SOAP CXF đang sử dụng lệnh sun.net.www.protocol.https.HttpsClient bên trong đã sử dụng đối tượng BufferedOutputStream.
Nhìn vào mã cho BufferedOutputStream Tôi đã nhận thấy phương thức flushBuffer() riêng chỉ là thiết lập biến đếm về 0 và không đặt lại mảng byte [] bên trong.
Không có vấn đề nào trong mã này đối với ứng dụng thông thường (chỉ cần đặt lại biến số đơn giản và hiệu quả hơn) nhưng điều này đã tăng cờ trong quy trình kiểm tra an toàn của chúng tôi để thay thế của tôi là tạo java.io.BufferedOutputStream tùy chỉnh zero mảng byte này và sau đó tôi sẽ cần phải thêm tập tin này trong classpath khởi động 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;
}
}
Điều này thực sự làm việc và tôi không thể tìm thấy dữ liệu CC trong bộ nhớ đổ nữa nhưng tôi không cảm thấy đây là giải pháp đúng (thay đổi tùy chỉnh của một lớp lõi java).
Bất kỳ đề xuất nào về cách tôi có thể giải quyết vấn đề này theo cách khác (phải thay đổi bất kỳ mã thư viện nào)?
Trình khách SOAP có được lưu trong bộ nhớ cache bằng cách nào đó không ?? Hoặc có thể là kết nối mà nó sử dụng? –
Tôi ngạc nhiên đây là trường hợp duy nhất bạn tìm thấy. Nói chung, các bãi JVM không an toàn đáng ngạc nhiên. – EJP
Tôi đã xem trong bộ phân tích bộ nhớ Eclipse và lớp bộ đệm ẩn dữ liệu nhạy cảm này là sun.security.ssl.SSLSocketImpl (bên trong trường handshakeListeners). Nhưng tôi không giữ bất kỳ tham chiếu trực tiếp đến khách hàng xà phòng này hoặc kết nối này. – amboni