Beveiliging en operationeel beheer van de backport-builder
Buildtool — GEEN runtime-afhankelijkheid. Deze pagina legt uit hoe je de buildpijplijn bedient en waar je op kunt vertrouwen. De beveiligingspositie van de Portable Document Format (PDF)-engine zelf wordt in de documentatie van de engine beschreven, niet hier.
In het kort
Sectie met titel “In het kort”De builder transformeert broncode die hij niet zelf schrijft en levert een distributie op waarop hij niet ontwikkelt. Uit die grens volgt het beveiligingsmodel. De vertrouwensgrens wordt gevormd door de broncode-checkout en de toolchain. Het opgeleverde artefact is alleen-lezen en machinaal gegenereerd. De licentiescheiding tussen publieke pakketten en Pro-pakketten ligt vast in code.
De vertrouwensgrens
Sectie met titel “De vertrouwensgrens”De builder gebruikt bronrepository’s en de vastgezette toolchain als invoer. Hij produceert een afgeleid artefact. Er gelden drie eigenschappen:
- De gegenereerde distributie is alleen-lezen en machinaal gegenereerd. Deze wordt gepubliceerd als versietags, niet als branches in deze repository. Ontwikkeling, bugrapporten en functieverzoeken horen thuis in de oorspronkelijke
nextpdf/*-bronrepository’s, nooit in de gegenereerde boom. Geverifieerd aan de hand van het waarschuwingsblok in de project-README.mden.github/workflows/build.yml(de release maakt vanaf nul een commit van de gegenereerde boom en tagt die). - Het bereik van het release-token is beperkt.
secrets.BACKPORT_TRIGGER_TOKENautoriseert het klonen van de bronrepository’s op de release-tag. Er wordt alleen naar verwezen in de stappen voor de broncode-checkout. Geverifieerd aan de hand vanbuild.yml(GH_TOKEN-gebruik). - CI-runners worden bewust gescheiden. Vertrouwde events draaien op self-hosted PHP-runners; pull requests vanuit forks en Dependabot-runs worden uitgevoerd op door GitHub gehoste runners. Onvertrouwde code wordt nooit op de vertrouwde runnerpool uitgevoerd. Geverifieerd aan de hand van
.github/workflows/0-ci.yml(deruns-on-voorwaarde).
Supply-chainpositie
Sectie met titel “Supply-chainpositie”- De toolchain is vastgelegd in
composer.json. Hij gebruikt Rector^2.0, PHPStan^2.1, PHPUnit^13.0en desymfony/polyfill-*-set. De builder heeft geen runtime-afhankelijkheid van NextPDF, dus een gecompromitteerd NextPDF-runtimepakket kan de builder niet bereiken. Geverifieerd aan de hand vancomposer.json. - Updates van afhankelijkheden zijn botgestuurd en bewaakt. Er zijn een Dependabot-configuratie en een auto-merge-workflow aanwezig. Dependabot-runs zijn vastgezet op door GitHub gehoste runners en doorlopen vóór het mergen nog steeds de volledige CI-controle (PHPStan, tests, dry-run). Geverifieerd aan de hand van
.github/dependabot.ymlen.github/workflows/0-ci.yml,9-dependabot-auto-merge.yml. - De uitvoer bevat geen buildstatus. Het release-archief wordt gezipt met
vendor/en.git/uitgesloten. Het gepubliceerde artefact bevat de broncode en het gegenereerde manifest, niet de eigen afhankelijkheidsboom van de builder. Geverifieerd aan de hand vanbuild.yml(zip ... -x '*/vendor/*' '*/.git/*'). - Statische analyse bewaakt de buildcode.
composer analysedraait PHPStan op niveau 10 overrector/rulesenscriptsbij elke push en pull request naar een van beide permanente branches. Het draait vóór elke dry-run. Geverifieerd aan de hand vancomposer.jsonen0-ci.yml.
De syntaxisvalidatiecontrole
Sectie met titel “De syntaxisvalidatiecontrole”Het buildscript controleert de uitvoer niet lokaal op syntaxis, omdat de buildhost een nieuwere PHP-versie draait dan het doel. De doorslaggevende controle staat in de release-workflow. Na de build schakelt de runner over naar de doelversie van PHP en draait php -l over output/src, waarbij de release mislukt bij elke parse- of fatale fout. Het artefact wordt daarna geïnstalleerd en getest over de validatiematrix — PHP 8.1 tot en met 8.4 voor de PHP 8.1-track, en PHP 7.4 en 8.0 voor de PHP 7.4-track. Een distributie die een doel-runtime zou afwijzen, bereikt geen release. Geverifieerd aan de hand van scripts/build.php (validateOutput()) en .github/workflows/build.yml (de syntaxiscontrole- en validate-*-jobs).
Dit is een garantie op basis van waargenomen gedrag, beperkt tot de runtimes die de pijplijn test. Het is geen conformiteitscertificering. Het doet geen uitspraak over de correctheid van het getransformeerde programma buiten de syntaxisacceptatie en de eigen testsuite van het project.
Licentiescheiding
Sectie met titel “Licentiescheiding”De twee gegenereerde pakketten hebben verschillende licenties; die zijn vastgelegd in scripts/adjust-composer.php:
| Pakket | Licentieveld | Ingesteld door |
|---|---|---|
nextpdf/backport | Apache-2.0 | generatePublicComposer() |
nextpdf/backport-pro | proprietary | generateProComposer() |
De builder-repository zelf is Apache-2.0 (composer.jsonlicense). De CHANGELOG.md legt een eerdere herlicentiëring van LGPL-3.0-or-later naar Apache-2.0 vast. Versies die vóór die wijziging zijn gepubliceerd, blijven onder de oudere licentie vallen en blijven beschikbaar, terwijl elke nieuwe versie Apache-2.0 is. De Pro-distributie is proprietair, wordt alleen geproduceerd voor het PHP 8.1-doel en vereist phpseclib/phpseclib ^3.0. Geverifieerd aan de hand van CHANGELOG.md, composer.json en scripts/adjust-composer.php.
Operationele garanties en hun grenzen
Sectie met titel “Operationele garanties en hun grenzen”Wat de pijplijn garandeert, is beperkt tot wat de code afdwingt:
- Stoppen bij de eerste fout. De build breekt af bij de eerste mislukkende fase met een benoemde fout. Een gedeeltelijke distributie wordt nooit vrijgegeven, omdat de release-jobs afhankelijk zijn van een geslaagde build en validatie. Geverifieerd aan de hand van
scripts/build.php(step()) en debuild.yml-jobneeds. - Geserialiseerde builds. De concurrency-groep
backport-buildmetcancel-in-progress: falsevoorkomt dat twee bronreleases met elkaar wedijveren om dezelfde release-tag. Geverifieerd aan de hand vanbuild.yml. - Reproduceerbare invoer. De pijplijn kloont elke bronrepository op de exacte release-tag vóór het bouwen. Geverifieerd aan de hand van
build.yml(--branch "${TAG}").
Wat de pijplijn niet beweert:
- Het certificeert geen conformiteit met standaarden, volledige PHP-versiecompatibiliteit of correctheid van het getransformeerde programma buiten de syntaxisacceptatie en de testsuite om.
- De downgrade verwijdert de door de runtime afgedwongen onveranderlijkheid (het strippen van
readonly). Code die erop vertrouwde dat de runtime een schrijfactie naar een readonly-eigenschap zou weigeren, verliest die bescherming in de gedowngradede uitvoer. Dit is een gedocumenteerde, opzettelijke afweging ten gunste van clone-with-veiligheid — zie /integrations/backport/troubleshooting/.
Een probleem melden
Sectie met titel “Een probleem melden”Beveiligingsproblemen in de builder volgen de SECURITY.md van de repository: meld ze via een GitHub Security Advisory of de beveiligingscontactpersoon, niet via een openbaar issue. Meld issues in de gegenereerde code bij de oorspronkelijke bronrepository’s, omdat de gegenereerde boom machinaal wordt geproduceerd en er niet op wordt ontwikkeld. Geverifieerd aan de hand van SECURITY.md en de project-README.md.
Volgende
Sectie met titel “Volgende”- /integrations/backport/overview/ — wat de builder is en wat hij produceert.
- /integrations/backport/production-usage/ — hoe je de release-pijplijn bedient.