Enterprise editie
Content Disarm and Reconstruction (CDR)
In het kort
Sectie met titel “In het kort”NextPDF Enterprise neutraliseert een niet-vertrouwde PDF met Content Disarm and Reconstruction (CDR): het parset het bestand, controleert het aan de hand van toelatingslimieten, detecteert gevaarlijke functies, verwijdert ze en herbouwt een nieuw bestand uit de objecten die overblijven. De gevaarlijke functies zijn actieve inhoud — ingebedde scripts, launch-acties, ingebedde bestanden, rich media en dergelijke — die een viewer zou kunnen uitvoeren of waarop deze zou kunnen reageren. Deze pagina is op gedragsniveau: ze beschrijft wat de engine binnenlaat, wat het verwijdert, wat het herbouwt en waarom de uitvoer geen bewijsrechtelijke kopie is.
CDR is een destructieve, eenrichtingstransformatie. De herbouwde uitvoer is een beveiligingsprojectie van de invoer, geen bewaarde of hash-equivalente kopie. Die grens wordt beschreven onder Beveiliging en compliance.
De vereisten staan in de frontmatter en worden herhaald onder Vereisten.
Beschikbaarheid en licenties
Sectie met titel “Beschikbaarheid en licenties”Deze functie wordt geleverd in NextPDF Enterprise (nextpdf/enterprise) en wordt geactiveerd met een licentie-envelop van het Enterprise-niveau. Een deployment zonder die rechten laadt de klassen van de functie niet. NextPDF Core en NextPDF Pro bieden geen CDR. De engine draait in-process; het niet-vertrouwde document wordt op jouw host geparset en herbouwd. Vergelijk edities en verkrijg een licentie.
Wat deze functie doet
Sectie met titel “Wat deze functie doet”PDF ondersteunt actieve inhoud die een viewer kan uitvoeren of waarop deze kan reageren. Een ECMAScript-actie zorgt ervoor dat een PDF-processor een script uitvoert dat veldwaarden en weergaven kan wijzigen, volgens ISO 32000-2 §12.6.4. Een launch-actie start een applicatie of opent of print een document, volgens ISO 32000-2 §12.6.4. Document-level scripts in het name dictionary draaien automatisch wanneer het document wordt geopend, volgens ISO 32000-2 §7.7.4. CDR verwijdert deze oppervlakken.
De engine draait een geordende pijplijn:
- Parse de invoer-PDF.
- Toelatingscontrole — verifieer dat het document binnen de toelatingsgrens valt (aantal objecten, aantal pagina’s, gedecodeerde-streamgrootte en een stream-inflatieratio die verdedigt tegen decompressie-bom-invoer). Een document buiten de limieten wordt afgewezen, niet gesaneerd. De afwijzing wordt afzonderlijk van een saneringsresultaat gerapporteerd, zodat jouw foutafhandeling de twee uit elkaar kan houden.
- Detecteer dreigingen — scan op de geconfigureerde dreigingstypen.
- Filter — verdeel objecten in de veilige set en de verwijderde set.
- Referentiescrubbing — schoon pointers op die door verwijdering los zijn komen te hangen.
- Herbouw — serialiseer de veilige objecten in een nieuwe PDF.
De detecteerbare dreigingstypen omvatten ingebedde scripts (en agressieve scriptverwijdering die scripts in misvormde structuren opvangt), additional-actions- en open-action-triggers, launch-acties, remote go-to-acties, form-submit- en import-data-acties, ingebedde bestanden, rich media en driedimensionale inhoud, document-level script-name-trees, externe Uniform Resource Identifier (URI)-acties, XML Forms Architecture-gegevens, interactieve formuliervelden, niet-standaard optional-content-lagen en digitale-handtekeningobjecten (die een herbouw noodzakelijkerwijs ongeldig maakt omdat de byte ranges niet meer overeenkomen). Een object dat niet kan worden geparset, wordt zelf behandeld als een potentiële bypass en verwijderd.
Drie beleidsregels bepalen de standaardinstellingen:
- Standard — verwijdert de door de engine detecteerbare, geconfigureerde dreigingstypen voor actieve inhoud; incrementele updates worden altijd platgeslagen om te verdedigen tegen signature-shadowing, en dat platslaan is in deze modus niet configureerbaar.
- Paranoid — dezelfde verwijderingen met striktere resourcelimieten.
- Permissive — voor vertrouwde bronnen: verwijdert scripts en launch-acties maar behoudt URI-acties, en maakt het platslaan van incrementele updates configureerbaar.
Waarom het zo werkt
Sectie met titel “Waarom het zo werkt”CDR herbouwt een nieuw bestand uit de objecten die het veilig heeft geacht, in plaats van gevaarlijke sleutels ter plekke te verwijderen. Die allow-list-houding is de dragende beslissing. Een object dat de detector nooit heeft herkend — inclusief een object dat het niet kon parsen — overleeft niet in de uitvoer, zodat een onbekende structuur veilig faalt (fail-closed) in plaats van door een gat in een deny-list te glippen. Toelatingscontrole draait om dezelfde reden eerst: een invoer boven de limiet of een niet-parsbare invoer wordt regelrecht afgewezen, nooit gedeeltelijk herbouwd. De prijs van die veiligheid is behoud. De herbouw verandert de byte-lay-out, maakt handtekeningen ongeldig en laat payloads vallen waarvan het dreigingstype wordt verwijderd — en daarom is de uitvoer een beveiligingsprojectie, nooit een bewijsrechtelijke kopie.
Ontwerpachtergrond: Niet-vertrouwde PDF’s saneren: content disarm and reconstruction.
Vereisten
Sectie met titel “Vereisten”- Installeer NextPDF Core en het Enterprise-pakket, en houd een actieve Enterprise-licentie aan.
- Definieer de toelatingsgrens voor jouw invoer — het maximale aantal objecten, aantal pagina’s, gedecodeerde-streamgrootte en inflatieratio — of gebruik de limieten van een preset-beleid.
- Beslis over het beleid: standard voor algemene niet-vertrouwde intake, paranoid voor de striktste positie, of permissive alleen voor vertrouwde bronnen.
Configuratie
Sectie met titel “Configuratie”Het beleid is onveranderlijk en draagt:
- Te verwijderen dreigingstypen — de set waarop de detector scant en die de herbouwer verwijdert.
- URI-actie-afhandeling — of externe URI-acties worden behouden.
- Platslaan van incrementele updates — altijd aan in standard en paranoid; configureerbaar in permissive.
- Toelatingslimieten — maximaal aantal objecten, aantal pagina’s, gedecodeerde-streamgrootte en inflatieratio. Dit is de toelatingsgrens, geen saneringsgedrag; bij overschrijding wordt het document afgewezen.
Stap voor stap
Sectie met titel “Stap voor stap”- Lees de niet-vertrouwde PDF-bytes.
- Selecteer een beleid (standard, paranoid of permissive) of bouw er een met expliciete limieten.
- Voer de sanitize-operatie van de engine uit met de bytes en het beleid.
- Inspecteer het resultaat: als het niet-toegelaten rapporteert, toon de afwijzingsreden; gebruik anders de herbouwde bytes en de lijst met verwijderde dreigingen.
- Behandel de herbouwde uitvoer als een gesaneerde projectie, nooit als een bewijsrechtelijke of archiveringskopie van de invoer.
<?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; }}Verificatie
Sectie met titel “Verificatie”- Voer een sample uit dat een bekend actieve-inhoudoppervlak draagt (bijvoorbeeld een document-level script) en bevestig dat het in de lijst met verwijderde dreigingen verschijnt en afwezig is in de herbouwde uitvoer.
- Voer een document boven de limiet uit en bevestig dat het resultaat niet-toegelaten rapporteert met een afwijzingsreden, en dat de herbouwde bytes leeg zijn.
- Bevestig dat een digitaal ondertekende invoer zijn handtekeningobjecten verwijderd krijgt in de herbouw — een herbouw maakt de oorspronkelijke handtekening ongeldig omdat de byte ranges veranderen, dus verouderde handtekeningobjecten worden per ontwerp verwijderd.
- Open de herbouwde uitvoer in een viewer en bevestig dat er bij het openen geen script wordt uitgevoerd.
Beveiliging en compliance
Sectie met titel “Beveiliging en compliance”- Niet voor bewijs. De herbouwde uitvoer is een destructieve, niet-omkeerbare projectie. Gebruik deze niet voor het bewaren van juridisch bewijs, voor hashvergelijking met het origineel of als archiveringskopie. Bewaar het origineel onder afzonderlijke bewaring als je een bewijsrechtelijke kopie nodig hebt.
- Toelating vóór sanering. Resourcelimieten zijn een toelatingsgrens; een document boven de limiet wordt afgewezen, niet gesaneerd. Rapporteer afwijzing afzonderlijk zodat een invoer boven de limiet nooit wordt aangezien voor een schone herbouw.
- Actieve inhoud wordt verwijderd. Scripts, launch-acties, document-level script-name-trees, ingebedde bestanden, rich media en dergelijke oppervlakken worden verwijderd — precies de acties die een viewer anders zou uitvoeren (ISO 32000-2 §12.6.4 ECMAScript-actie; launch-actie; document-level scripts §7.7.4).
- Handtekeningen worden ongeldig gemaakt door herbouw. Omdat de herbouw de byte-lay-out verandert, kan de oorspronkelijke handtekening niet meer valideren; handtekeningobjecten worden verwijderd in plaats van misleidend op hun plek gelaten.
- Lossy per ontwerp. Payloads van ingebedde bestanden — inclusief factuurbijlagen zoals Factur-X — worden verwijderd wanneer hun dreigingstype wordt verwijderd. CDR is een beveiligingsprojectie, geen bewaarlaag.
Deze pagina betreft documentbeveiliging. Elke normatieve bron is geparafraseerd; er wordt geen normatieve tekst gereproduceerd.
Foutafhandeling
Sectie met titel “Foutafhandeling”- Parse-fout. Een document dat niet kan worden geparset, levert een niet-toegelaten resultaat op met een parse-foutreden in plaats van een gedeeltelijke herbouw.
- Invoer boven de limiet. Het resultaat rapporteert niet-toegelaten met een limietspecifieke reden; de herbouwde bytes zijn leeg.
- Niet-parsbaar object. Een object dat niet kan worden geparset, wordt behandeld als een potentiële bypass en verwijderd, niet stilzwijgend behouden.
- Best-effort paginatelling. De toelatingscontrole op het aantal pagina’s is best-effort; een misvormde catalog laat de pijplijn niet crashen, maar de object- en streamlimieten gelden nog steeds.
Publicatiegrens
Sectie met titel “Publicatiegrens”Deze pagina documenteert alleen extern waarneembaar gedrag en het ondersteunde publieke API-oppervlak. Interne namespace-paden, helperklassen, mechanismetabellen, runbook-bestandsnamen en ticketprefixen vallen buiten de scope.
Zie ook
Sectie met titel “Zie ook”- Security — NextPDF Enterprise — het gecombineerde Enterprise-beveiligingsoppervlak.
- Validation — NextPDF Enterprise — conformiteitscontrole van een geproduceerde of herbouwde PDF.
- Forensics — NextPDF Enterprise — documentonderzoek en tracering.
- Security — NextPDF Core — het core encryptie- en handtekeningoppervlak.
- CDR · active content · shadow attack — woordenlijsttermen.