Ga naar inhoud
getnextpdf.com

Enterprise editie

Forensics

NextPDF Enterprise Forensics leest de incremental-update-historie van een PDF en produceert een gestructureerd, read-only rapport van revisies, geclassificeerde gebeurtenissen en per-object-wijzigingen. Het ondersteunt workflows voor forensische analyse. Het is geen tamper-proof zegel en stelt niet dat een document authentiek of ongewijzigd is.

Deze mogelijkheid wordt geleverd in NextPDF Enterprise (nextpdf/enterprise) en wordt geactiveerd met een licentie-envelop op Enterprise-niveau. Een implementatie zonder die entitlement laadt de classes van de mogelijkheid niet. Vergelijk edities en vraag een licentie aan.

Terminal window
composer require nextpdf/enterprise:^3

Een PDF kan worden bijgewerkt door wijzigingen aan het einde van het bestand toe te voegen in plaats van het te herschrijven. Elke update voegt een nieuwe cross-reference-sectie en een nieuwe trailer toe, en de oorspronkelijke bytes blijven op hun plaats — ISO 32000-2:2020 §7.5.6. Wanneer een object wordt gewijzigd, voegt de update een nieuwe kopie toe en registreert de cross-reference-sectie van de update een byte-offset die de oudere offset overschrijft; een lezer lost de meest recente kopie op — ISO 32000-2:2020 §7.5.6. De initiële bestandsstructuur kan door latere updates worden gewijzigd — ISO 32000-2:2020 §7.5.4. De cross-reference-sectie van een update vermeldt alleen de objecten die in die update zijn toegevoegd, gewijzigd of verwijderd — ISO 32000-2:2020 §7.5.5.

De analyzer leest deze gelaagde structuur. Hij parseert de cross-reference-tabel van elke revisie, leidt revisie-bytegrenzen af en vergelijkt de vermeldingen van elke revisie met de eerstvolgende oudere revisie om elk object te classificeren als toegevoegd, gewijzigd of verwijderd. Vervolgens groepeert hij objectwijzigingen tot gebeurtenissen op hoger niveau: er is een handtekening toegevoegd, de documentcatalogus is bijgewerkt, er is een encryptie-dictionary verschenen, of er is een set objecten toegevoegd, gewijzigd of verwijderd. De uitvoer is één rapportobject dat een revisietelling, totale grootte, een per-revisie-overzichtslijst, een geclassificeerde gebeurtenistijdlijn en de per-object-wijzigingslijst draagt.

De analyzer is read-only. Hij detecteert het bestaan van een handtekeningrevisie uit structurele markers; hij valideert geen handtekening, herberekent geen digest en controleert geen certificaat. Handtekeningvalidatie is een aparte Core-mogelijkheid. Een geproduceerd rapport is een structurele beschrijving van de update-historie zoals geparseerd; het is geen vaststelling dat een document authentiek is, dat een wijziging ongeautoriseerd was of dat elke wijziging is gedetecteerd. Behandel het rapport als tamper-evidence-detectie zoals getest tegen de visie van de parser op de revisieketen, niet als een forensische garantie of een gerechtelijk toelaatbare attestatie.

De analyzer stopt bewust bij de structuur. Hij rapporteert wat de revisieketen bevat en stelt nooit dat een wijziging geautoriseerd of een handtekening geldig was. Structurele aanwezigheid en cryptografische geldigheid zijn verschillende beweringen; het samenvoegen ervan zou een aanroeper tamper-evidence voor een garantie kunnen laten aanzien. Handtekeninggeldigheid blijft daarom bij het enkele Core-ondertekeningsoppervlak, waarmee Forensics combineert in plaats van het te dupliceren. Het rapport is JSON-serialiseerbare structurele metadata, zodat een SIEM de bewerkingsgeschiedenis inneemt zonder documentinhoud aan te raken. Ontwerpachtergrond: Incrementele updates en waarom ze ertoe doen.

TypeSoortRolStabiliteitSinds
ForensicAnalyzerclassParseert een PDF en retourneert een forensisch rapport (statisch analyze)stable1.10.0
ForensicReportclassHet analyseresultaat; JsonSerializable voor SIEM-exportstable1.10.0
RevisionSummaryclassPer-revisie-feiten: objecttelling, grootte, bytegrenzen, aanwezigheidsvlaggenstable1.10.0
ForensicEventclassEén geclassificeerde gebeurtenis met een lijst getroffen objectenstable1.10.0
ForensicEventTypeenumGebeurteniscategorieën (handtekening toegevoegd, catalogus bijgewerkt, objecten toegevoegd, en andere)stable1.10.0
ObjectChangeclassDe wijzigingsrecord van één object over twee revisiesstable1.10.0
ObjectChangeTypeenumToegevoegd, gewijzigd of verwijderdstable1.10.0

ForensicReport stelt hasIncrementalUpdates(), hasAnySignature(), getEventsByType(), getChangesForRevision() en jsonSerialize() beschikbaar. De hasSignature-vlag op een revisie-overzicht is een structureel aanwezigheidssignaal, geen geldigheidsresultaat.

Analyze the revision history of a PDF
<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Enterprise\Forensics\ForensicAnalyzer;
/**
* Produce a forensic report from PDF bytes.
*
* @param string $pdfData Raw PDF file bytes.
*
* @return array{revisions: int, incremental: bool, signedRevisionPresent: bool}
*/
function inspect(string $pdfData): array
{
$report = ForensicAnalyzer::analyze($pdfData);
return [
'revisions' => $report->revisionCount,
'incremental' => $report->hasIncrementalUpdates(),
'signedRevisionPresent' => $report->hasAnySignature(),
];
}

hasAnySignature() rapporteert dat een handtekeningrevisie aanwezig is in de structuur. Het stelt niet dat de handtekening geldig is.

Forensic analysis with SIEM export and fail-closed handling
<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Enterprise\Forensics\ForensicAnalyzer;
use NextPDF\Enterprise\Forensics\ForensicEventType;
use Psr\Log\LoggerInterface;
final readonly class RevisionAuditor
{
public function __construct(private LoggerInterface $logger) {}
/**
* Analyze a document and emit a structural JSON record for the SIEM.
*
* @param string $pdfData The PDF bytes to inspect.
*
* @return string A JSON forensic report (no document content).
*/
public function audit(string $pdfData): string
{
try {
$report = ForensicAnalyzer::analyze($pdfData);
$this->logger->info('Forensic analysis complete', [
'revisions' => $report->revisionCount,
'sizeBytes' => $report->totalSizeBytes,
'signatureAddedEvents' => count(
$report->getEventsByType(ForensicEventType::SignatureAdded),
),
]);
return json_encode($report, JSON_THROW_ON_ERROR);
} catch (\Throwable $e) {
$this->logger->error('Forensic analysis failed', ['error' => $e->getMessage()]);
throw $e;
}
}
}

De logrecord draagt alleen tellingen en groottes. Hij draagt geen documenttekst. Het catch-blok gooit opnieuw; het slikt geen parse-fout in.

  • Een document met één revisie heeft geen incrementele historie. De wijzigingslijst is leeg; dit is geen bewijs van authenticiteit.
  • Een SignatureAdded-gebeurtenis betekent dat een handtekeningrevisie structureel aanwezig is. Het is geen handtekening-geldigheidsresultaat. Valideer de handtekening met het Core-ondertekeningsoppervlak.
  • Objecthergebruik is normaal: een bijgewerkt object behoudt zijn objectnummer en er wordt een nieuwe kopie toegevoegd. De analyzer rapporteert dit als Modified, niet als verwijdering en heraanmaak.
  • Een Deleted-classificatie is een free-entry-overgang in de cross-reference-keten. Een lezer kan nog steeds een oudere kopie van dat object oplossen; verwijdering op structuurniveau is geen garantie van onherstelbaarheid.
  • De analyzer rapporteert wat de parser waarnam. Een document dat is vervaardigd om een parser te verwarren, kan een rapport opleveren dat niet overeenkomt met de visie van een ander tool. Het rapport is geen claim dat elke wijziging is gedetecteerd.
  • De invoer is begrensd. Een te groot of buitensporig multi-revisie-document faalt fail-closed met een getypeerde parse-exception in plaats van onbegrensd geheugen te verbruiken.

De analysekosten schalen met de revisietelling en de objecttelling, niet met de complexiteit van de gerenderde pagina. Het wandtijdbudget van 1500 ms dekt een typisch multi-revisie-bedrijfsdocument. Het reproduceerbaarheidsprofiel is structural: het rapport is deterministisch voor een gegeven invoer, maar absolute byte-offsets weerspiegelen het exacte invoerbestand en zijn niet draagbaar over opnieuw opgeslagen kopieën.

De analyzer is read-only en schrijft nooit naar de invoer. Het is een analytisch oppervlak, geen transformationeel. Hij detecteert het bestaan van handtekening- en encryptiemarkers maar voert geen cryptografische bewerking uit, dus hij doet geen FIPS-claim. Een rapport beschrijft de geparseerde update-historie; het is geen authenticiteitsbewering en mag niet worden gepresenteerd als tamper-proof, forensisch gegarandeerd of gerechtelijk toelaatbaar. Een operator trekt conclusies; de bibliotheek rapporteert structuur.

Analyse draait in-process op de host die de PDF bevat. Geen documentinhoud verlaat de host. Het rapport draagt objectnummers, revisie-indices, groottes, bytegrenzen en gebeurteniscategorieën — structurele metadata, geen documenttekst of gedetecteerde persoonsgegevens. Of de invoer-PDF of het rapport zelf persoonsgegevens bevat, en waar elk wordt opgeslagen, is een implementatieverantwoordelijkheid buiten de grens van de bibliotheek.

De bibliotheek werpt getypeerde excepties met structurele berichten en plaatst geen documentbytes in exceptietekst. Een implementatie die rond de analyse logt, zou de tellingen en categorieën van het rapport moeten loggen — zoals getoond in het productievoorbeeld — en mag de ruwe PDF-payload niet naar logs of een APM-backend loggen. Het JSON-rapport is het veilige artefact om naar een SIEM door te sturen.

Er treedt geen cryptografische bewerking op in deze module, dus er is geen FIPS-modusspecifiek gedrag. Handtekeningvalidatie, die cryptografisch is, is een aparte Core-mogelijkheid en wordt daar gedocumenteerd.

ClaimStandaardClausule
Latere updates voegen aanvullende elementen toe aan het einde van het bestand; de oorspronkelijke structuur wordt door latere updates gewijzigd.ISO 32000-2:2020§7.5.6
Een bijgewerkt object wordt toegevoegd als een nieuwe kopie en de cross-reference-vermelding van de update overschrijft de eerdere byte-offset; de lezer lost de meest recente kopie op.ISO 32000-2:2020§7.5.6
De initiële bestandsstructuur kan door latere updates worden gewijzigd.ISO 32000-2:2020§7.5.4
De cross-reference-sectie van een update bevat alleen vermeldingen voor toegevoegde, gewijzigde of verwijderde objecten.ISO 32000-2:2020§7.5.5
De signature dictionary registreert wat is ondertekend.ISO 32000-2:2020§12.8.1
ByteRange definieert de byte-span die de handtekening dekt (handtekeningvalidatie is een aparte Core-mogelijkheid).ISO 32000-2:2020§12.8.1
Een Document Security Store bewaart langetermijnvalidatiemateriaal in een latere revisie.ISO 32000-2:2020§12.8.4

Alle clausules zijn geparafraseerd. NextPDF reproduceert geen normatieve tekst. Raadpleeg de gepubliceerde standaard voor de gezaghebbende bewoordingen. NextPDF doet geen forensische-certificeringsclaim; het rapport beschrijft de geparseerde update-structuur, geen gecertificeerde vaststelling van documentintegriteit.

  • De analyzer is read-only: hij schrijft nooit naar het invoerdocument en voert geen cryptografische bewerking uit.
  • Hij parseert de cross-reference-tabel van elke revisie, leidt revisie-bytegrenzen af en classificeert elk object als toegevoegd, gewijzigd of verwijderd, en groepeert wijzigingen vervolgens tot een geclassificeerde gebeurtenistijdlijn.
  • Een SignatureAdded-gebeurtenis betekent dat een handtekeningrevisie structureel aanwezig is; het is geen handtekening-geldigheidsresultaat — validatie is een aparte Core-mogelijkheid.
  • Een document met één revisie heeft een lege wijzigingslijst (geen bewijs van authenticiteit); een Deleted-classificatie is een free-entry-overgang, geen garantie van onherstelbaarheid.
  • De invoer is begrensd: een te groot of buitensporig multi-revisie-document faalt fail-closed met een getypeerde parse-exception. Het rapport is tamper-evidence-detectie zoals getest, geen forensische garantie of gerechtelijk toelaatbare attestatie.

Deze pagina documenteert alleen extern waarneembaar gedrag en het ondersteunde openbare API-oppervlak. Interne namespace-paden, helper-classes, mechanismetabellen, runbook-bestandsnamen en ticketprefixen vallen buiten de scope.

NextPDF Core (Apache-2.0) heeft geen revisiehistorie-forensische analyzer — geen; deze mogelijkheid heeft geen equivalent op Core-niveau. Core levert het gezaghebbende handtekeningvalidatie-oppervlak, waarmee de analyzer combineert maar dat hij niet vervangt.

NextPDF Pro heeft geen revisiehistorie-forensische analyzer — geen; deze mogelijkheid heeft geen equivalent op Pro-niveau. De read-only revisie- en per-object-wijzigingsrapportage en het JSON-serialiseerbare SIEM-rapport worden alleen geleverd in het nextpdf/enterprise-pakket.

De revisieparser, de wijzigingsclassificatie en de gebeurtenistijdlijn worden op gedragsniveau beschreven. De parser-internals en eventueel intern classificatiedetail vallen buiten de scope van het openbare oppervlak. Handtekeninggeldigheid valt hier bewust buiten de scope — het is de verantwoordelijkheid van het Core-ondertekeningsoppervlak.

Analyse draait in-process op de host die de PDF bevat; geen documentinhoud verlaat de host. Of de invoer-PDF of het rapport persoonsgegevens bevat, en waar elk wordt opgeslagen, is een implementatieverantwoordelijkheid buiten de grens van de bibliotheek. De operator trekt conclusies uit het rapport; de bibliotheek rapporteert structuur en doet geen uitspraak over documentauthenticiteit.

Er geldt geen exportcontrolebeperking voor het Forensics-oppervlak. Het rapport mag niet worden gepresenteerd als tamper-proof, forensisch gegarandeerd of gerechtelijk toelaatbaar. Deze documentatie is geen juridisch oordeel; raadpleeg uw eigen compliance- en juridische adviseurs.