Enterprise edycja
Rozbrajanie i rekonstrukcja treści (CDR)
W skrócie
Dział zatytułowany „W skrócie”NextPDF Enterprise neutralizuje niezaufany plik PDF metodą rozbrojenia i rekonstrukcji treści (Content Disarm and Reconstruction, CDR): parsuje plik, sprawdza go względem limitów dopuszczenia, wykrywa niebezpieczne funkcje, usuwa je i odbudowuje nowy plik z obiektów, które pozostały. Niebezpieczne funkcje to aktywna treść — osadzone skrypty, akcje uruchamiania, pliki osadzone, treści multimedialne i podobne — które przeglądarka mogłaby wykonać lub na które mogłaby zareagować. Ta strona jest na poziomie zachowania: stwierdza, co silnik dopuszcza, co usuwa, co odbudowuje i dlaczego wynik nie jest kopią dowodową.
CDR to destrukcyjna, jednokierunkowa transformacja. Odbudowany wynik jest projekcją bezpieczeństwa danych wejściowych, a nie zachowaną ani równoważną pod względem skrótu kopią. Tę granicę opisano w sekcji Bezpieczeństwo i zgodność.
Wymagania wstępne podano w nagłówku (front matter) i powtórzono w sekcji Wymagania wstępne.
Dostępność i licencjonowanie
Dział zatytułowany „Dostępność i licencjonowanie”Ta możliwość jest dostarczana w NextPDF Enterprise (nextpdf/enterprise) i aktywuje się za pomocą koperty licencyjnej w poziomie Enterprise. Wdrożenie bez tego uprawnienia nie ładuje klas tej możliwości. NextPDF Core oraz NextPDF Pro nie udostępniają CDR. Silnik działa w obrębie procesu; niezaufany dokument jest parsowany i odbudowywany na Twoim hoście. Porównaj edycje i uzyskaj licencję.
Co robi ta możliwość
Dział zatytułowany „Co robi ta możliwość”PDF obsługuje aktywną treść, którą przeglądarka może wykonać lub na którą może zareagować. Akcja ECMAScript powoduje, że procesor PDF wykonuje skrypt, który może zmienić wartości i wyglądy pól, zgodnie z ISO 32000-2 §12.6.4. Akcja uruchamiania uruchamia aplikację albo otwiera lub drukuje dokument, zgodnie z ISO 32000-2 §12.6.4. Skrypty na poziomie dokumentu w słowniku nazw uruchamiają się automatycznie po otwarciu dokumentu, zgodnie z ISO 32000-2 §7.7.4. CDR usuwa te powierzchnie.
Silnik uruchamia uporządkowany potok:
- Parsowanie wejściowego pliku PDF.
- Kontrola dopuszczenia — weryfikacja, czy dokument mieści się w granicy akceptacji (liczba obiektów, liczba stron, rozmiar zdekodowanego strumienia oraz współczynnik inflacji strumienia, który broni przed wejściami typu bomba dekompresyjna). Dokument poza limitami jest odrzucany, a nie sanityzowany. Odrzucenie jest raportowane w sposób odróżnialny od wyniku sanityzacji, aby Twoja obsługa błędów mogła odróżnić te dwa przypadki.
- Wykrywanie zagrożeń — skanowanie pod kątem skonfigurowanych typów zagrożeń.
- Filtrowanie — podział obiektów na zbiór bezpieczny i zbiór usunięty.
- Czyszczenie odwołań — czyszczenie wskaźników pozostawionych jako wiszące przez usunięcie.
- Odbudowa — serializacja bezpiecznych obiektów do nowego pliku PDF.
Wykrywalne typy zagrożeń obejmują osadzone skrypty (oraz agresywne usuwanie skryptów, które wychwytuje skrypty w zniekształconych strukturach), wyzwalacze akcji dodatkowych i akcji otwarcia, akcje uruchamiania, akcje zdalnego przejścia (remote go-to), akcje przesłania i importu danych formularza, pliki osadzone, treści multimedialne i trójwymiarowe, drzewa nazw skryptów na poziomie dokumentu, zewnętrzne akcje Uniform Resource Identifier (URI), dane XML Forms Architecture, interaktywne pola formularzy, niedomyślne warstwy treści opcjonalnej oraz obiekty podpisu cyfrowego (które odbudowa z konieczności unieważnia, ponieważ zakresy bajtów przestają się zgadzać). Obiekt, którego nie da się sparsować, jest sam traktowany jako potencjalne obejście i usuwany.
Trzy polityki ustalają wartości domyślne:
- Standard — usuwa wykrywalne przez silnik, skonfigurowane typy zagrożeń aktywnej treści; aktualizacje przyrostowe są zawsze spłaszczane, aby bronić przed cieniowaniem podpisu (signature-shadowing), a to spłaszczanie nie jest w tym trybie konfigurowalne.
- Paranoid — te same usunięcia z ciaśniejszymi limitami zasobów.
- Permissive — dla zaufanych źródeł: usuwa skrypty i akcje uruchamiania, ale zachowuje akcje URI oraz czyni spłaszczanie aktualizacji przyrostowych konfigurowalnym.
Dlaczego działa w ten sposób
Dział zatytułowany „Dlaczego działa w ten sposób”CDR odbudowuje nowy plik z obiektów, które uznał za bezpieczne, zamiast usuwać niebezpieczne klucze w miejscu. Ta postawa listy dozwolonych (allow-list) jest decyzją nośną. Obiekt, którego detektor nigdy nie rozpoznał — w tym taki, którego nie dało się sparsować — nie przetrwa do wyniku, więc nieznana struktura zawodzi w sposób bezpieczny (fail closed), zamiast prześlizgnąć się przez lukę listy zablokowanych (deny-list). Kontrola dopuszczenia działa jako pierwsza z tego samego powodu: wejście przekraczające limit lub niemożliwe do sparsowania jest odrzucane wprost, nigdy częściowo odbudowywane. Kosztem tego bezpieczeństwa jest zachowanie treści. Odbudowa zmienia układ bajtów, unieważnia podpisy i odrzuca ładunki, których typ zagrożenia jest usuwany — dlatego wynik jest projekcją bezpieczeństwa, nigdy kopią dowodową.
Tło projektowe: Sanityzacja niezaufanych plików PDF: rozbrajanie i rekonstrukcja treści.
Wymagania wstępne
Dział zatytułowany „Wymagania wstępne”- Zainstaluj NextPDF Core oraz pakiet Enterprise i utrzymuj aktywną licencję Enterprise.
- Zdefiniuj granicę akceptacji dla swoich danych wejściowych — maksymalną liczbę obiektów, liczbę stron, rozmiar zdekodowanego strumienia oraz współczynnik inflacji — albo użyj limitów wstępnie zdefiniowanej polityki.
- Zdecyduj o polityce: standard dla ogólnego przyjmowania treści niezaufanej, paranoid dla najsurowszej postawy lub permissive wyłącznie dla zaufanych źródeł.
Konfiguracja
Dział zatytułowany „Konfiguracja”Polityka jest niemutowalna i niesie:
- Typy zagrożeń do usunięcia — zbiór, który detektor skanuje, a moduł odbudowy usuwa.
- Obsługa akcji URI — czy zewnętrzne akcje URI są zachowywane.
- Spłaszczanie aktualizacji przyrostowych — zawsze włączone w standard i paranoid; konfigurowalne w permissive.
- Limity dopuszczenia — maksymalna liczba obiektów, liczba stron, rozmiar zdekodowanego strumienia oraz współczynnik inflacji. To granica akceptacji, a nie zachowanie sanityzacji; ich przekroczenie odrzuca dokument.
Krok po kroku
Dział zatytułowany „Krok po kroku”- Odczytaj bajty niezaufanego pliku PDF.
- Wybierz politykę (standard, paranoid lub permissive) albo zbuduj własną z jawnymi limitami.
- Uruchom operację sanityzacji silnika z bajtami i polityką.
- Zbadaj wynik: jeśli raportuje niedopuszczony, ujawnij powód odrzucenia; w przeciwnym razie użyj odbudowanych bajtów oraz listy usuniętych zagrożeń.
- Traktuj odbudowany wynik jako zsanityzowaną projekcję, nigdy jako kopię dowodową ani archiwalną danych wejściowych.
<?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; }}Weryfikacja
Dział zatytułowany „Weryfikacja”- Uruchom próbkę niosącą znaną powierzchnię aktywnej treści (na przykład skrypt na poziomie dokumentu) i potwierdź, że pojawia się ona na liście usuniętych zagrożeń i jest nieobecna w odbudowanym wyniku.
- Uruchom dokument przekraczający limit i potwierdź, że wynik raportuje niedopuszczony z powodem odrzucenia, a odbudowane bajty są puste.
- Potwierdź, że podpisane cyfrowo wejście ma usunięte obiekty podpisu w odbudowie — odbudowa unieważnia oryginalny podpis, ponieważ zakresy bajtów się zmieniają, więc nieaktualne obiekty podpisu są z założenia usuwane.
- Otwórz odbudowany wynik w przeglądarce i potwierdź, że po otwarciu nie wykonuje się żaden skrypt.
Bezpieczeństwo i zgodność
Dział zatytułowany „Bezpieczeństwo i zgodność”- Nie do celów dowodowych. Odbudowany wynik to destrukcyjna, nieodwracalna projekcja. Nie używaj go do zachowywania dowodów prawnych, do porównania skrótu z oryginałem ani jako kopii archiwalnej. Zachowaj oryginał pod oddzielną pieczą, jeśli potrzebujesz kopii dowodowej.
- Dopuszczenie przed sanityzacją. Limity zasobów to granica akceptacji; dokument przekraczający limit jest odrzucany, a nie sanityzowany. Raportuj odrzucenie w sposób odróżnialny, aby wejścia przekraczającego limit nigdy nie pomylić z czystą odbudową.
- Aktywna treść jest usuwana. Skrypty, akcje uruchamiania, drzewa nazw skryptów na poziomie dokumentu, pliki osadzone, treści multimedialne i podobne powierzchnie są usuwane — to właśnie te akcje, które przeglądarka w przeciwnym razie by wykonała (ISO 32000-2 §12.6.4 akcja ECMAScript; akcja uruchamiania; skrypty na poziomie dokumentu §7.7.4).
- Podpisy są unieważniane przez odbudowę. Ponieważ odbudowa zmienia układ bajtów, oryginalny podpis nie może już zostać zwalidowany; obiekty podpisu są usuwane, zamiast pozostawiać je w mylący sposób na miejscu.
- Stratne z założenia. Ładunki plików osadzonych — w tym załączniki faktur, takie jak Factur-X — są usuwane, gdy ich typ zagrożenia jest usuwany. CDR to projekcja bezpieczeństwa, a nie warstwa zachowywania.
Ta strona dotyczy bezpieczeństwa dokumentów. Każde źródło normatywne jest sparafrazowane; żaden tekst normatywny nie jest odtwarzany.
Obsługa błędów
Dział zatytułowany „Obsługa błędów”- Niepowodzenie parsowania. Dokument, którego nie da się sparsować, daje wynik niedopuszczony z powodem błędu parsowania, a nie częściową odbudowę.
- Wejście przekraczające limit. Wynik raportuje niedopuszczony z powodem właściwym dla limitu; odbudowane bajty są puste.
- Obiekt niemożliwy do sparsowania. Obiekt, którego nie da się sparsować, jest traktowany jako potencjalne obejście i usuwany, a nie po cichu zachowywany.
- Najlepsze możliwe liczenie stron. Sprawdzenie dopuszczenia liczby stron jest realizowane na zasadzie najlepszego możliwego wyniku; zniekształcony katalog nie powoduje awarii potoku, ale limity liczby obiektów i strumieni nadal obowiązują.
Granica publikacji
Dział zatytułowany „Granica publikacji”Ta strona dokumentuje wyłącznie zachowanie obserwowalne z zewnątrz oraz obsługiwaną publiczną powierzchnię API. Wewnętrzne ścieżki przestrzeni nazw, klasy pomocnicze, tabele mechanizmów, nazwy plików runbooków oraz prefiksy zgłoszeń są poza zakresem.
Zobacz także
Dział zatytułowany „Zobacz także”- Security — NextPDF Enterprise — połączona powierzchnia bezpieczeństwa Enterprise.
- Validation — NextPDF Enterprise — sprawdzanie zgodności wytworzonego lub odbudowanego pliku PDF.
- Forensics — NextPDF Enterprise — badanie dokumentów i śledzenie.
- Security — NextPDF Core — rdzeniowa powierzchnia szyfrowania i podpisu.
- CDR · aktywna treść · atak cieniowy — terminy ze słownika.