Enterprise phiên bản
Content Disarm and Reconstruction (CDR)
Tổng quan nhanh
Phần tiêu đề “Tổng quan nhanh”NextPDF Enterprise vô hiệu hóa một PDF không tin cậy bằng Content Disarm and Reconstruction (CDR): nó phân tích tệp, đối chiếu với các giới hạn tiếp nhận, phát hiện các tính năng nguy hiểm, loại bỏ chúng, và dựng lại một tệp mới từ các đối tượng còn lại. Các tính năng nguy hiểm là nội dung chủ động — script nhúng, launch action, tệp nhúng, rich media, và những thứ tương tự — mà một trình xem có thể thực thi hoặc hành động theo. Trang này ở mức hành vi: nó nêu engine tiếp nhận những gì, loại bỏ những gì, dựng lại những gì, và vì sao kết quả không phải là một bản sao làm bằng chứng.
CDR là một phép biến đổi phá hủy, một chiều. Kết quả dựng lại là một phép chiếu bảo mật của đầu vào, không phải một bản sao được bảo toàn hay tương đương băm. Ranh giới đó được nêu trong Bảo mật và tuân thủ.
Các điều kiện tiên quyết được nêu trong front matter và được nhắc lại trong Điều kiện tiên quyết.
Phiên bản và cấp phép
Phần tiêu đề “Phiên bản và cấp phép”Năng lực này đi kèm trong NextPDF Enterprise (nextpdf/enterprise) và được kích hoạt bằng một license envelope cấp Enterprise. Một triển khai không có quyền đó sẽ không nạp các lớp của năng lực này. NextPDF Core và NextPDF Pro không cung cấp CDR. Engine chạy trong tiến trình; tài liệu không tin cậy được phân tích và dựng lại trên máy chủ của bạn. So sánh các phiên bản và nhận giấy phép.
Năng lực này làm gì
Phần tiêu đề “Năng lực này làm gì”PDF hỗ trợ nội dung chủ động mà một trình xem có thể thực thi hoặc hành động theo. Một ECMAScript action khiến một PDF processor thực thi một script có thể thay đổi giá trị trường và diện mạo, theo ISO 32000-2 §12.6.4. Một launch action khởi chạy một ứng dụng hoặc mở hoặc in một tài liệu, theo ISO 32000-2 §12.6.4. Các script ở cấp tài liệu trong name dictionary chạy tự động khi tài liệu được mở, theo ISO 32000-2 §7.7.4. CDR loại bỏ các bề mặt này.
Engine chạy một pipeline có thứ tự:
- Phân tích PDF đầu vào.
- Kiểm soát tiếp nhận — xác minh tài liệu nằm trong ranh giới chấp nhận (số đối tượng, số trang, kích thước luồng đã giải mã, và một tỷ lệ phình luồng để phòng vệ trước các đầu vào decompression-bomb). Một tài liệu nằm ngoài giới hạn sẽ bị từ chối, không được làm sạch. Việc từ chối được báo cáo tách biệt với một kết quả làm sạch để việc xử lý lỗi của bạn có thể phân biệt hai trường hợp.
- Phát hiện mối đe dọa — quét các kiểu mối đe dọa đã cấu hình.
- Lọc — phân các đối tượng thành tập an toàn và tập bị loại bỏ.
- Làm sạch tham chiếu — dọn các con trỏ bị treo do việc loại bỏ.
- Dựng lại — tuần tự hóa các đối tượng an toàn thành một PDF mới.
Các kiểu mối đe dọa có thể phát hiện bao gồm script nhúng (và việc loại bỏ script tích cực bắt được các script trong những cấu trúc dị dạng), additional-actions và open-action trigger, launch action, remote go-to action, form submit và import-data action, tệp nhúng, rich media và nội dung ba chiều, document-level script name tree, external Uniform Resource Identifier (URI) action, dữ liệu XML Forms Architecture, trường biểu mẫu tương tác, các lớp optional-content không mặc định, và các đối tượng chữ ký số (mà một lần dựng lại tất yếu làm vô hiệu vì các byte range không còn khớp). Một đối tượng không thể phân tích được tự nó được coi là một lối vòng tiềm năng và bị loại bỏ.
Ba chính sách đặt các giá trị mặc định:
- Standard — loại bỏ các kiểu mối đe dọa nội dung chủ động đã cấu hình mà engine có thể phát hiện; các bản cập nhật tăng dần luôn được làm phẳng để phòng vệ trước signature-shadowing, và việc làm phẳng đó không thể cấu hình ở chế độ này.
- Paranoid — cùng các loại bỏ với giới hạn tài nguyên chặt hơn.
- Permissive — dành cho các nguồn tin cậy: loại bỏ script và launch action nhưng giữ lại URI action, và làm cho việc làm phẳng cập nhật tăng dần có thể cấu hình.
Vì sao nó hoạt động theo cách này
Phần tiêu đề “Vì sao nó hoạt động theo cách này”CDR dựng một tệp mới từ các đối tượng mà nó đánh giá là an toàn, thay vì xóa các khóa nguy hiểm tại chỗ. Lập trường allow-list đó là quyết định trọng yếu. Một đối tượng mà trình phát hiện chưa bao giờ nhận diện — bao gồm cả đối tượng nó không thể phân tích — sẽ không tồn tại được vào kết quả, nên một cấu trúc chưa biết sẽ fail-closed thay vì lọt qua một khe hở của deny-list. Kiểm soát tiếp nhận chạy trước vì cùng lý do đó: một đầu vào vượt giới hạn hoặc không thể phân tích bị từ chối thẳng, không bao giờ được dựng lại một phần. Cái giá của sự an toàn đó là việc bảo toàn. Bản dựng lại thay đổi bố cục byte, làm vô hiệu các chữ ký, và loại bỏ các payload có kiểu mối đe dọa bị loại — đó là lý do kết quả là một phép chiếu bảo mật, không bao giờ là một bản sao làm bằng chứng.
Bối cảnh thiết kế: Làm sạch các PDF không tin cậy: content disarm and reconstruction.
Điều kiện tiên quyết
Phần tiêu đề “Điều kiện tiên quyết”- Cài đặt NextPDF Core và gói Enterprise, và giữ một giấy phép Enterprise đang hoạt động.
- Xác định ranh giới chấp nhận cho các đầu vào của bạn — số đối tượng tối đa, số trang, kích thước luồng đã giải mã, và tỷ lệ phình — hoặc dùng các giới hạn của một chính sách định sẵn.
- Quyết định chính sách: standard cho việc tiếp nhận không tin cậy nói chung, paranoid cho lập trường chặt chẽ nhất, hoặc permissive chỉ dành cho các nguồn tin cậy.
Cấu hình
Phần tiêu đề “Cấu hình”Chính sách là bất biến và mang theo:
- Các kiểu mối đe dọa cần loại bỏ — tập mà trình phát hiện quét và trình dựng lại loại bỏ.
- Xử lý URI-action — liệu các external URI action có được giữ lại hay không.
- Làm phẳng cập nhật tăng dần — luôn bật ở standard và paranoid; có thể cấu hình ở permissive.
- Giới hạn tiếp nhận — số đối tượng tối đa, số trang, kích thước luồng đã giải mã, và tỷ lệ phình. Đây là ranh giới chấp nhận, không phải hành vi làm sạch; vượt quá chúng sẽ từ chối tài liệu.
Từng bước
Phần tiêu đề “Từng bước”- Đọc các byte PDF không tin cậy.
- Chọn một chính sách (standard, paranoid, hoặc permissive) hoặc dựng một chính sách với các giới hạn tường minh.
- Chạy thao tác làm sạch của engine với các byte và chính sách.
- Kiểm tra kết quả: nếu nó báo cáo không được tiếp nhận, hãy nêu lý do từ chối; nếu không, hãy dùng các byte đã dựng lại và danh sách các mối đe dọa đã loại bỏ.
- Hãy coi kết quả dựng lại là một phép chiếu đã làm sạch, không bao giờ là một bản sao làm bằng chứng hay lưu trữ của đầu vào.
<?php
declare(strict_types=1);
require_once __DIR__ . '/../../vendor/autoload.php';
use NextPDF\Enterprise\Security\Cdr\CdrEngine;use NextPDF\Enterprise\Security\Cdr\CdrPolicy;use NextPDF\Enterprise\Security\Cdr\CdrResult;use Psr\Log\LoggerInterface;
final readonly class UntrustedPdfIntake{ public function __construct( private CdrEngine $engine, private LoggerInterface $logger, ) {}
/** * Sanitize an untrusted PDF and distinguish rejection from a clean rebuild. * * An over-limit document is rejected by admission control, not sanitized; * the caller surfaces the rejection reason instead of trusting an empty * output. The rebuilt bytes are a security projection, never an * evidentiary copy of the input. * * @param string $pdfBytes The untrusted PDF bytes. * * @return CdrResult The sanitization result, including admission status. */ public function sanitize(string $pdfBytes): CdrResult { $result = $this->engine->sanitize($pdfBytes, CdrPolicy::standard());
if (! $result->admitted) { $this->logger->warning('PDF rejected by CDR admission control', [ 'reason' => $result->rejectionReason, ]);
return $result; }
$this->logger->info('PDF sanitized', [ 'removedThreats' => \count($result->removedThreats), 'originalSize' => $result->originalSize, 'sanitizedSize' => $result->sanitizedSize, ]);
return $result; }}Xác minh
Phần tiêu đề “Xác minh”- Chạy một mẫu mang theo một bề mặt nội dung chủ động đã biết (ví dụ một script ở cấp tài liệu) và xác nhận nó xuất hiện trong danh sách mối đe dọa đã loại bỏ và vắng mặt trong kết quả dựng lại.
- Chạy một tài liệu vượt giới hạn và xác nhận kết quả báo cáo không được tiếp nhận kèm một lý do từ chối, và các byte dựng lại là rỗng.
- Xác nhận một đầu vào đã ký số có các đối tượng chữ ký của nó bị loại bỏ trong bản dựng lại — một lần dựng lại làm vô hiệu chữ ký gốc vì các byte range thay đổi, nên các đối tượng chữ ký cũ bị loại bỏ theo thiết kế.
- Mở kết quả dựng lại trong một trình xem và xác nhận không có script nào thực thi khi mở.
Bảo mật và tuân thủ
Phần tiêu đề “Bảo mật và tuân thủ”- Không dùng làm bằng chứng. Kết quả dựng lại là một phép chiếu phá hủy, không thể đảo ngược. Đừng dùng nó cho việc bảo toàn bằng chứng pháp lý, cho việc so sánh băm với bản gốc, hay làm một bản sao lưu trữ. Hãy giữ bản gốc dưới một quyền giám hộ riêng nếu bạn cần một bản sao làm bằng chứng.
- Tiếp nhận trước khi làm sạch. Giới hạn tài nguyên là một ranh giới chấp nhận; một tài liệu vượt giới hạn bị từ chối, không được làm sạch. Hãy báo cáo việc từ chối tách biệt để một đầu vào vượt giới hạn không bao giờ bị nhầm với một bản dựng lại sạch.
- Nội dung chủ động bị loại bỏ. Script, launch action, document-level script name tree, tệp nhúng, rich media, và các bề mặt tương tự bị loại bỏ — chính những hành động mà một trình xem nếu không sẽ thực thi (ISO 32000-2 §12.6.4 ECMAScript action; launch action; document-level scripts §7.7.4).
- Chữ ký bị làm vô hiệu bởi việc dựng lại. Vì bản dựng lại thay đổi bố cục byte, chữ ký gốc không còn xác thực được nữa; các đối tượng chữ ký bị loại bỏ thay vì để lại tại chỗ một cách gây hiểu lầm.
- Mất dữ liệu theo thiết kế. Các payload tệp nhúng — bao gồm các tệp đính kèm hóa đơn như Factur-X — bị loại bỏ khi kiểu mối đe dọa của chúng bị loại bỏ. CDR là một phép chiếu bảo mật, không phải một lớp bảo toàn.
Trang này liên quan đến bảo mật tài liệu. Mọi nguồn quy phạm đều được diễn giải lại; không có văn bản quy phạm nào được sao chép nguyên văn.
Xử lý lỗi
Phần tiêu đề “Xử lý lỗi”- Lỗi phân tích. Một tài liệu không thể phân tích sẽ cho ra một kết quả không được tiếp nhận kèm một lý do lỗi phân tích thay vì một bản dựng lại một phần.
- Đầu vào vượt giới hạn. Kết quả báo cáo không được tiếp nhận kèm một lý do cụ thể về giới hạn; các byte dựng lại là rỗng.
- Đối tượng không thể phân tích. Một đối tượng không thể phân tích được coi là một lối vòng tiềm năng và bị loại bỏ, không được giữ lại một cách âm thầm.
- Đếm số trang ở mức nỗ lực tối đa. Kiểm tra tiếp nhận theo số trang là ở mức nỗ lực tối đa; một catalog dị dạng không làm sập pipeline, nhưng các giới hạn về số đối tượng và luồng vẫn áp dụng.
Ranh giới xuất bản
Phần tiêu đề “Ranh giới xuất bản”Trang này chỉ ghi lại hành vi quan sát được từ bên ngoài và bề mặt public API được hỗ trợ. Các đường dẫn namespace nội bộ, lớp trợ giúp, bảng cơ chế, tên tệp runbook, và tiền tố ticket nằm ngoài phạm vi.
Xem thêm
Phần tiêu đề “Xem thêm”- Security — NextPDF Enterprise — bề mặt bảo mật Enterprise kết hợp.
- Validation — NextPDF Enterprise — kiểm tra tính phù hợp của một PDF được tạo hoặc dựng lại.
- Forensics — NextPDF Enterprise — soi xét và truy vết tài liệu.
- Security — NextPDF Core — bề mặt mã hóa và chữ ký cốt lõi.
- CDR · active content · shadow attack — các thuật ngữ bảng chú giải.