Beveiliging en operationeel beheer van compat-legacy
In een oogopslag
Sectie met titel “In een oogopslag”De adapter gebruikt het beveiligingsmodel van de NextPDF-engine en voegt ten opzichte van legacy TCPDF 6.2.13 enkele bewuste verhardingen toe. Deze pagina beschrijft precies wat wel en niet beschikbaar is, zonder overdrijving. Lees het gedeelte over ondertekening zorgvuldig; de scope ervan is bewust beperkt.
Geharde legacy-gedragingen
Sectie met titel “Geharde legacy-gedragingen”De adapter wijzigt drie historische gedragingen van TCPDF 6.2.13 uit veiligheidsoverwegingen. Ze kunnen niet worden teruggezet naar de onveilige variant:
| Aandachtspunt | Legacy TCPDF 6.2.13 | Adapter |
|---|---|---|
| Foutafhandeling | Error() roept die() aan en beëindigt het proces | Error() werpt RuntimeException; aanroepers kunnen de fout waarnemen en afhandelen zonder dat het proces stilzwijgend wordt beëindigd. |
| HTML-uitvoering | Een escape-mechanisme kon PHP uitvoeren vanuit markup | De constante K_TCPDF_CALLS_IN_HTML staat vast op false; markup kan geen PHP-uitvoering activeren. |
| Directe uitvoer | Output() schrijft naar de actieve uitvoerbuffer | De uitvoer loopt via een veilige bestemmingsbrug en vervuilt geen uitvoerbuffer die door de aanroeper wordt beheerd. |
Door de wijziging in de foutafhandeling kunt u een fout waarnemen in plaats van het proces door beëindiging te verliezen. De Open Worldwide Application Security Project (OWASP) Application Security Verification Standard (ASVS) 5.0 §16.5.3 stelt dat een applicatie netjes en veilig moet falen en fail-open-situaties moet voorkomen. De keuze voor een exceptie in plaats van procesbeëindiging past dat principe toe. De HTML-verharding verwijdert een sink voor code-uitvoering. Behandel legacy-code die op het oude gedrag steunde als een defect dat u tijdens /integrations/tcpdf-compat/migration/ moet verhelpen. De vastgezette clausuledigest staat in de front-matter citations van de pagina.
Versleuteling
Sectie met titel “Versleuteling”De adapter stelt TCPDF’s SetProtection() beschikbaar en delegeert naar de standaardbeveiligingshandler van de NextPDF-engine.
- De standaardhandler gebruikt AES-256. De legacy-parameter
$modewordt aanvaard voor compatibiliteit met de methodesignatuur en genegeerd; via deze methode kunt u geen zwakker versleutelingsalgoritme selecteren. Wanneer de strikte modus is ingeschakeld, werpt een niet-standaard$modeeen exceptie, zodat de migratie dit expliciet moet erkennen (geverifieerd intests/Unit/Compat/Tcpdf/TcpdfStrictModeTest.php). - Als er geen eigenaarswachtwoord is opgegeven, genereert de adapter een cryptografisch sterk willekeurig eigenaarswachtwoord in plaats van het gebruikerswachtwoord opnieuw te gebruiken. Dit voorkomt dat gebruikers met toegang op gebruikersniveau controle op eigenaarsniveau over het document krijgen.
- Certificaatgebaseerde versleuteling (met publieke sleutel) gebeurt niet via
SetProtection(); de adapter negeert de bijbehorende parameter$pubkeys. Gebruik het moderne instappunt voor versleuteling met publieke sleutel dat de adapter beschikbaar stelt (setPublicKeyEncryption()), dat naar de engine delegeert.
Het versleutelingsgedrag weerspiegelt de standaardbeveiligingshandler die in ISO 32000-2 §7 wordt beschreven. Die clausule definieert de items in het versleutelingswoordenboek en de AES-256-standaardhandler die de engine gebruikt. Deze documentatie beweert niet dat de uitvoer „standaard veilig” of „fraudebestendig” is. Ze vermeldt alleen het gebruikte versleutelingsalgoritme en het gedrag van het eigenaarswachtwoord zoals de code dat implementeert. De vastgezette clausuledigest staat in de front-matter citations van de pagina.
<?php
declare(strict_types=1);
require __DIR__ . '/vendor/autoload.php';
use NextPDF\Compat\Tcpdf\TCPDF;
$pdf = new TCPDF();$pdf->AddPage();$pdf->SetFont('helvetica', '', 12);$pdf->Cell(0, 10, 'Encrypted document');
// User password set; owner password auto-generated (strong, random).$pdf->SetProtection([], 'user-secret');
$pdf->Output(__DIR__ . '/encrypted.pdf', 'F');Digitale handtekeningen — bereikverklaring
Sectie met titel “Digitale handtekeningen — bereikverklaring”Lees dit gedeelte letterlijk; het is bewust terughoudend.
- De legacy-methoden
setSignature()enaddEmptySignatureAppearance()van TCPDF zijn in de adapter voor de core-engine niet geïmplementeerd. In de standaardmodus doen ze niets. In de strikte modus werpen zeTcpdfNotImplementedException. - Digitale ondertekening is via deze adapter geen mogelijkheid van de core-distributie. Ondersteuning van baseline-handtekeningen vereist een commerciële NextPDF-editie.
- Als er een commerciële editie aanwezig is, stelt de adapter een modern instappunt voor handtekeningen beschikbaar (
setSignatureV2()) dat naar de engine delegeert. Het standaardprofiel is het baseline (B-B)-profiel. - Deze documentatie doet geen uitspraak dat enige editie via deze adapter handtekeningprofielen met tijdstempel, langetermijnvalidatie of archivering produceert. Concreet beweert ze geen B-T-gedrag, B-LT-gedrag of B-LTA-gedrag. De baselinespecificatie §6.1 van PDF Advanced Electronic Signatures (PAdES) definieert vier afzonderlijke baseline-niveaus: B-B, B-T, B-LT en B-LTA. Elk niveau heeft eigen vereisten. B-B is het baseline-niveau, en de hogere niveaus (tijdstempel, langetermijn, archivering) zijn afzonderlijke, veeleisendere profielen. Alleen de B-B-baseline valt binnen het bereik van de documentatie van deze compatibiliteitslaag. De hogere niveaus vallen uitdrukkelijk buiten het bereik en worden hier voor geen enkele editie geclaimd. De vastgezette clausuledigest staat in de front-matter
citationsvan de pagina. - Deze documentatie doet nergens een claim over „gecertificeerde”, „gegarandeerde”, „juridisch geldige” of „eIDAS-gekwalificeerde” handtekeningen. De correctheid van ondertekening, het beleid voor trust-anchors en de juridische geldigheid zijn de verantwoordelijkheid van de ondertekenende editie en de Public Key Infrastructure (PKI) van de aanroeper, niet van deze compatibiliteitslaag.
Als uw migratie ondertekening vereist, behandel dit dan als een afzonderlijk werkpakket: gebruik de moderne application programming interface (API) voor handtekeningen op een commerciële editie en valideer de resulterende handtekening met een onafhankelijke verificator. Vertrouw niet op de TCPDF-aanroep setSignature(); die doet hier niets.
De legacy-methode setTimeStamp() wordt aanvaard voor compatibiliteit met de methodesignatuur en geeft een notice af; via deze adapter produceert ze geen handtekening met tijdstempel.
PDF/A en conformiteit
Sectie met titel “PDF/A en conformiteit”De constructorvlag pdfa wordt aanvaard voor compatibiliteit met de methodesignatuur. PDF/A-archiveringsconformiteit vereist een commerciële NextPDF-editie. De adapter stelt enablePdfA() beschikbaar, dat naar de engine delegeert, en de engine geeft een bruikbare configuratiefout terug wanneer de vereiste editie ontbreekt. De adapter produceert niet stilzwijgend een niet-conform bestand met een PDF/A-claim.
De uitvoer is altijd PDF 2.0 (ISO 32000-2). ISO 32000-2 §7.5.2 specificeert dat een conforme writer de documentversie identificeert als 2.0 en deze bij het opslaan niet verlaagt naar een oudere versie. Daarom kan setPDFVersion() geen oudere versie instellen (zie /integrations/tcpdf-compat/method-coverage/ §4). De vastgezette clausuledigest staat in de front-matter citations van de pagina.
Operationele richtlijnen
Sectie met titel “Operationele richtlijnen”- Geen procesbeëindiging. Omdat
Error()een exceptie werpt in plaats vandie()aan te roepen, omhult u render-instappunten mettry/catchen wijst u fouten toe aan het foutcontract van uw applicatie. Ga er niet van uit dat een mislukte render het verzoek beëindigt. - Veiligheid van de uitvoerbuffer.
Output()metSgeeft bytes terug; metFschrijft het een bestand; metEgeeft het een base64 Multipurpose Internet Mail Extensions (MIME)-body terug; metI/Dverloopt het via het uitvoerpad van de engine. Geef in workers en Hypertext Transfer Protocol (HTTP)-handlers de voorkeur aanSofF, zodat u de respons zelf beheert; zie /integrations/tcpdf-compat/production-usage/. - De strikte modus is geen productie-instelling. Beperk hem tot een continuous integration (CI)- of audittaak. Een exceptie in een renderpad in productie is erger dan een stilzwijgend gedegradeerde parameter.
- Hygiëne van constanten. Definieer
PDF_*- /K_*-constanten voordat de adapter voor het eerst wordt geconstrueerd. De twee geharde vlaggen (K_TCPDF_CALLS_IN_HTML,K_TCPDF_THROW_EXCEPTION_ERROR) staan vast; probeer ze niet te versoepelen. - Willekeurige eigenaarswachtwoorden. Als u steunt op een deterministisch eigenaarswachtwoord, stel dat dan expliciet in. Anders wordt er per document een sterk willekeurig wachtwoord gegenereerd dat niet kan worden teruggehaald.
Opmerkingen over het dreigingsmodel
Sectie met titel “Opmerkingen over het dreigingsmodel”- Voor image-methoden weigert de adapter een stream-wrapper-pad voordat er iets uit het bestandssysteem wordt gelezen. Detectie van het beeldtype (
TcpdfImages::getImageFileType) behandelt elkscheme://-pad, inclusiefphar://,php://en andere PHP-stream-wrappers, als een wrapper en slaat defile_get_contents/getimagesize-probe over, met terugval op inferentie uitsluitend op basis van de extensie. Dit sluit een phar-metadata-deserialisatievector op het PHP 7.4-backportdoel; de engine weigert vervolgens het wrapper-pad zelf in te bedden. - Bovenop wat de engine doet, voegt de adapter geen padvalidatie of -opschoning toe voor bestandspaden die aan image-methoden of output-methoden worden doorgegeven. Behandel door de aanroeper aangeleverde paden en URL’s als niet-vertrouwd aan de grens van uw applicatie.
- HTML die aan de HTML-methoden wordt doorgegeven, wordt door de engine gerenderd, niet door een TCPDF HTML-parser. De legacy-sink voor PHP-uitvoering is gesloten, maar u moet door de aanroeper aangeleverde HTML nog steeds als niet-vertrouwde invoer behandelen.
- Versleuteling beschermt de vertrouwelijkheid van het document in rust onder de standaardhandler. Het is geen vervanging voor transportbeveiliging of toegangscontrole in uw applicatie.
Zie ook
Sectie met titel “Zie ook”- /integrations/tcpdf-compat/method-coverage/ — exact gedrag van
SetProtection(),setSignature() - /integrations/tcpdf-compat/configuration/ — de twee geharde, niet-configureerbare vlaggen
- /integrations/tcpdf-compat/production-usage/ — workers, buffers, foutafhandeling
docs/TCPDF_COVERAGE.md— gezaghebbende dekkingsmatrix- Pakket
NOTICE— verklaring van onafhankelijke implementatie