Beveiliging en operations voor NextPDF Symfony
In een oogopslag
Sectie met titel “In een oogopslag”De response-helpers passen een vaste set beveiligingsheaders toe. Het asynchrone data transfer object (DTO) voor berichten valideert het uitvoerpad twee keer. Ondertekening is optioneel en blijft, met het Pro-niveau, beperkt tot het hier beschreven baseline-profiel.
HTTP-beveiligingsheaders voor responses
Sectie met titel “HTTP-beveiligingsheaders voor responses”NextPDF\Symfony\Http\PdfResponse past dezelfde set headers toe op elke response die wordt opgebouwd: inline, download en beide gestreamde varianten. De broncodeconstante verifieert precies deze headers:
| Header | Waarde |
|---|---|
Cache-Control | private, max-age=0, must-revalidate |
Pragma | public |
X-Content-Type-Options | nosniff |
X-Frame-Options | DENY |
Content-Security-Policy | default-src 'none' |
X-Robots-Tag | noindex, nofollow |
Referrer-Policy | no-referrer |
Deze headers beperken content-type-sniffing, framing, indexering en het lekken van referrers voor gegenereerde documenten. De gebufferde varianten stellen daarnaast Content-Type: application/pdf en Content-Length in. De gestreamde varianten stellen het content-type in en laten Content-Length doelbewust weg.
De bundle legt deze set headers vast. Als je headers wilt toevoegen of wijzigen, zoals een striktere Cache-Control voor geauthenticeerde downloads, pas je de geretourneerde Response in je controller aan voordat je die retourneert.
Content-Disposition en verwerking van bestandsnamen
Sectie met titel “Content-Disposition en verwerking van bestandsnamen”PdfResponse bouwt de Content-Disposition-header defensief op. PdfResponseTest verifieert dit gedrag:
- De bestandsnaam wordt opgeschoond; padscheidingstekens en traversal-reeksen worden verwijderd, zodat een bestandsnaam zoals
../../../etc/passwd.pdfniet kan ontsnappen. - Een
.pdf-extensie wordt toegevoegd wanneer deze ontbreekt; een bestaande extensie wordt niet gedupliceerd, ook niet bij een hoofdletter-.PDF. - Dubbele aanhalingstekens en backslashes worden geëscaped voor de quoted-string-vorm.
- Niet-ASCII-bestandsnamen krijgen een ASCII-fallback en een RFC-5987-variant (Request for Comments 5987)
filename*=UTF-8''. - Een lege bestandsnaam valt terug op
document.pdf.
Geef een door de gebruiker beïnvloede bestandsnaam pas door nadat je de autorisatiecontrole op applicatieniveau hebt uitgevoerd. De bundle schoont op voor headerveiligheid, niet voor toegangscontrole.
Asynchrone validatie van het uitvoerpad
Sectie met titel “Asynchrone validatie van het uitvoerpad”NextPDF\Symfony\Message\GeneratePdfMessage valideert het uitvoerpad in de constructor. NextPDF\Symfony\Message\GeneratePdfHandler valideert het opnieuw tijdens uitvoering voordat er wordt geschreven. De constructor weigert:
- een leeg pad, of een pad dat een null-byte bevat;
- een stream-wrapper-schema zoals
php://...; - een
..-traversal-segment met ofwel/- of\-scheidingstekens; - een pad dat niet eindigt op
.pdf(hoofdletterongevoelig); - een
builderClassdie geen syntactisch geldige klassenaam is.
De tweede validatie in de handler is belangrijk omdat een bericht tussen verzending en verwerking in een wachtrij kan blijven staan. De handler vertrouwt het in de wachtrij geplaatste pad niet en past de padbewaking opnieuw toe voordat er wordt opgeslagen. Voer workers uit onder een filesystem-account met minimale rechten en beperk dat account tot de beoogde uitvoermap.
Grens van builder-resolutie
Sectie met titel “Grens van builder-resolutie”GeneratePdfHandler resolveert builders vanuit een PHP Standard Recommendation 11-servicelocator (PSR-11) met de klassenaam als sleutel en weigert alles wat geen PdfBuilderInterface is. Omdat de locator alleen geregistreerde builders blootstelt, kan een door een aanvaller gecontroleerde builderClass in een gemanipuleerde transport-payload geen willekeurige klasse instantiëren. Volgens PSR-11 mislukt het resolven van een id wanneer een container die als afwezig meldt, in plaats van stilzwijgend iets onverwachts te retourneren (PSR-11 §1.1.2). Registreer alleen vertrouwde builder-klassen in de locator.
Optionele opstelling voor digitale ondertekening
Sectie met titel “Optionele opstelling voor digitale ondertekening”Digitale ondertekening maakt geen deel uit van de core-bundle. Die wordt alleen geactiveerd wanneer nextpdf/premium (dat het Pro-niveau installeert) aanwezig is en de compiler-pass de Pro-ondertekeningsklassen detecteert. Wanneer de bundle en het Pro-niveau zijn geïnstalleerd, is de ondersteunde, gedocumenteerde ondertekeningsconfiguratie het baseline B-B-profiel.
Het configuratieknooppunt signature.level accepteert extra stringwaarden voor schemacompatibiliteit binnen de NextPDF-configuratiefamilie. De geleverde en ondersteunde ondertekeningsfunctionaliteit van deze bundle is B-B. De NextPDF Premium-documentatie behandelt ondertekeningsprofielen verder dan B-B, hun vereisten en hun operationele aandachtspunten. Die worden hier doelbewust niet beschreven.
Operationele aandachtspunten voor het B-B-ondertekeningspad:
- De ondertekenaar wordt alleen geregistreerd wanneer
signature.enabledwaar is ensignature.certificateis ingesteld; anders is de sectie inactief. - Lever het certificaat, de privésleutel en het wachtwoord aan via Symfony-secrets of omgevingsvariabelen. Commit die nooit naar de repository.
- Beperk de leesrechten op sleutelmateriaal tot het applicatie-account.
Optionele logging
Sectie met titel “Optionele logging”De lettertype- en afbeeldingsregisters accepteren een optionele Psr\Log\LoggerInterface die met nullOnInvalid() is gebonden. Als die aanwezig is, is het een verwisselbare collaborator onder het PHP Standard Recommendation 3-loggercontract (PSR-3) (PSR-3). Verwijder gebruikersidentificerende gegevens uit elke logcontext die je rond documentgeneratie toevoegt; de bundle logt geen documentinhoud.
Operationele verhardingschecklist
Sectie met titel “Operationele verhardingschecklist”- Behoud de vaste response-headers; voeg striktere caching voor geauthenticeerde downloads toe in de controller.
- Autoriseer het verzoek voordat je een document genereert of retourneert; de bundle voert geen toegangscontrole uit.
- Bewaar ondertekeningssleutelmateriaal in Symfony-secrets / omgevingsvariabelen met bestandsrechten volgens het principe van minimale rechten.
- Voer Messenger-workers uit onder een account met minimale rechten, waarbij schrijftoegang beperkt is tot de uitvoermap.
- Houd
ext-mbstringenext-zlibingeschakeld (de bundle faalt anders snel). - Pin één enkele major van
nextpdf/corein de applicatie zodat de engine-versie over implementaties heen deterministisch blijft.
Conformiteit
Sectie met titel “Conformiteit”Elke rij is een normatieve claim die op deze pagina wordt gemaakt, vastgepind aan een volledige 64-hex reference_id uit het afgeschermde corpus van de standards development organization (SDO). De herkomst (corpusmanifest, ophaaltransport) staat in _sidecars/rag-citations.yaml.
| Spec | Clausule | reference_id | Claim |
|---|---|---|---|
| PSR-11 | psr_11_container#1.1.2.p5 | has() false impliceert dat get() NotFoundException werpt | |
| PSR-3 | psr_3_logger#x3.p17 | Optionele logger-collaborator |
Commerciële context
Sectie met titel “Commerciële context”Digitale ondertekening is alleen beschikbaar als nextpdf/premium (Pro) is geïnstalleerd; het geleverde profiel van deze bundle is baseline B-B. Deze optionele Pro-functionaliteit vereist geen codewijziging in de hier gedocumenteerde Core-bundle. Zie </get-license/?intent=symfony-pro>.
Zie ook
Sectie met titel “Zie ook”- /integrations/symfony/production-usage/ — workerveiligheid en streaming.
- /integrations/symfony/configuration/ — de signature-, tsa- en servicetabellen.
- /integrations/symfony/troubleshooting/ — diagnose van ondertekenings- en Messenger-problemen.
- /integrations/symfony/integration/ — end-to-end-bedradingsreferentie.