Sicherheit und Betrieb — NextPDF auf CodeIgniter 4
Auf einen Blick
Abschnitt betitelt „Auf einen Blick“Diese Seite beschreibt die Bedrohungen, denen diese Integration standhalten muss. Sie benennt die Kontrollen im Paket-Quellcode und gibt betriebliche Regeln für ein sicheres Deployment vor.
Bedrohungsmodell
Abschnitt betitelt „Bedrohungsmodell“Die Integration hat drei Angriffsflächen, die von Angreifern beeinflusst werden können.
- Queue-Job-Payload. Eine Queue speichert Job-Daten. Ein Angreifer mit Broker-Zugriff kann diese Daten verändern. Dabei handelt es sich um nicht vertrauenswürdige, deserialisierte Eingaben.
- Antwort-Dateiname. Ein Benutzer kann den Download-Dateinamen angeben. Ein bösartig gewählter Name kann Header-Inhalte einschleusen.
- Konfigurationspfade. Der Schriftpfad und die Signierpfade stammen aus der Konfiguration. Ein bösartig gesetzter Pfad kann Lese- oder Schreibzugriffe am falschen Ort auslösen.
Kontrolle 1 — Allowlist für Queue-Payloads
Abschnitt betitelt „Kontrolle 1 — Allowlist für Queue-Payloads“Der Queue-Job behandelt seinen Payload als nicht vertrauenswürdige, deserialisierte Daten. OWASP ASVS fordert eine sichere Eingabeverarbeitung für deserialisierte, nicht vertrauenswürdige Daten (ASVS V1.5.2).
Geprüfte Kontrollen in GeneratePdfJob:
- Der Builder muss ein nicht leerer String sein. Der Job lehnt andere Typen ab.
- Der Builder muss dem Muster
App\PdfBuilders\<Class>::<method>entsprechen. Der Job lehnt jeden anderen Namespace, einfache Funktionen sowie Payloads mit Präfix oder Suffix ab. - Der Builder muss aufrufbar sein. Der Job lehnt einen String ab, der zwar dem Muster entspricht, sich aber nicht auflösen lässt.
Diese Regeln verhindern, dass über einen manipulierten Queue-Payload beliebiger Code ausgeführt wird. Die Pakettests decken jeden Ablehnungsfall ab.
Kontrolle 2 — Begrenzung des Queue-Ausgabepfads
Abschnitt betitelt „Kontrolle 2 — Begrenzung des Queue-Ausgabepfads“Der Job schreibt eine Datei in das Dateisystem. OWASP ASVS fordert eine sichere Pfadverarbeitung, wenn eine Anwendung Dateipfade für Dateioperationen erstellt (ASVS V5.3.2).
Geprüfte Kontrollen in GeneratePdfJob:
- Der Ausgabepfad muss ein nicht leerer String sein.
- Der Job normalisiert den Pfad. Er löst
.- und..-Segmente auf und vereinheitlicht Trennzeichen vor jeder Prüfung. - Der normalisierte Pfad muss innerhalb von
WRITEPATH/pdfs/liegen. Der Job lehnt ein Schwesterverzeichnis ab, das dasselbe Namenspräfix verwendet (pdfs-evil/). - Der Pfad muss auf
.pdfenden (ohne Beachtung der Groß-/Kleinschreibung).
Diese Regeln verhindern beliebige Dateischreibvorgänge über einen manipulierten Payload.
Kontrolle 3 — Härtung der Antwort-Header
Abschnitt betitelt „Kontrolle 3 — Härtung der Antwort-Header“PdfResponse fügt jeder PDF-Antwort einen festen Satz von Headern hinzu:
| Header | Wert |
|---|---|
X-Content-Type-Options | nosniff |
X-Frame-Options | DENY |
Content-Security-Policy | default-src 'none' |
X-Robots-Tag | noindex, nofollow |
Referrer-Policy | no-referrer |
Cache-Control | private, max-age=0, must-revalidate |
Der Dateiname wird bereinigt, bevor er in den Header gelangt. Das Paket entfernt Pfadtrennzeichen, Nullbytes und CR/LF. Für die in Anführungszeichen gesetzte Form maskiert es doppelte Anführungszeichen. Bei einem Nicht-ASCII-Namen fügt es einen RFC 5987-Parameter filename*=UTF-8''… hinzu. Ein leerer Name wird zu document.pdf.
Kontrolle 4 — Validierung der Konfigurationspfade
Abschnitt betitelt „Kontrolle 4 — Validierung der Konfigurationspfade“Die Schriftregistrierung lehnt einen fontsPath ab, der einen Stream-Wrapper (://) oder ein Nullbyte enthält. Sie löst einen Laufzeitfehler aus. Das blockiert Stream-Wrapper-Pfade wie php:// oder phar://.
Kontrolle 5 — Minimale Service-Locator-Oberfläche
Abschnitt betitelt „Kontrolle 5 — Minimale Service-Locator-Oberfläche“CodeIgniter 4 hat keinen PSR-11-Container. Es verwendet einen Service-Locator. PSR-11 §1.3 stuft das Service-Locator-Muster als unerwünscht ein (Modalwort SHOULD NOT). Das Paket hält die Locator-Oberfläche klein. Jeder Service wird über eine einzelne benannte Factory-Methode bereitgestellt. Lösen Sie Services an der Controller-Grenze auf. Reichen Sie konkrete Objekte nach innen weiter. Geben Sie die Klasse Services nicht an Domänencode weiter.
Signieren und TSA-Betrieb (NextPDF Pro / Enterprise)
Abschnitt betitelt „Signieren und TSA-Betrieb (NextPDF Pro / Enterprise)“Der Signierdienst ist standardmäßig inaktiv. Er wird nur aktiv, wenn signature.enabled auf true steht und signature.certificate nicht leer ist. Die standardmäßige Signaturstufe des Pakets ist B-B. NextPDF Pro stellt die B-B-Baseline-Signatur bereit. Die Langzeitvalidierung ist eine eigene Enterprise-Fähigkeit. Sie ist in der Premium-Referenz dokumentiert, nicht hier.
Betriebliche Regeln:
- Halten Sie Zertifikats- und Schlüsseldateien aus der Versionsverwaltung heraus. Stellen Sie sie über
.envoder einen Secrets-Manager bereit. - Lassen Sie
tsa.allow_insecure_httpin der Produktion auffalsestehen. Ein TSA-Kanal im Klartext ist nicht akzeptabel. - Setzen Sie
tsa.pinned_public_keys, wenn die TSA einen stabilen Schlüssel veröffentlicht. Lassen Sietsa.warn_on_key_rotationauftruestehen. - Beschränken Sie den Lesezugriff auf die Schlüsseldatei auf den Anwendungsbenutzer.
Betriebs-Checkliste
Abschnitt betitelt „Betriebs-Checkliste“- Fixieren Sie alle aufgelösten Versionen in
composer.lock. - Setzen Sie
codeigniter4/queuein der Anwendung voraus, die Worker ausführt. - Führen Sie den Queue-Worker als Benutzer mit niedrigen Rechten aus. Gewähren Sie ihm nur Schreibzugriff auf
WRITEPATH/pdfs/. - Stellen Sie dem Worker dieselben NextPDF-Erweiterungen wie der Webschicht bereit. Ein signiertes PDF benötigt NextPDF Pro oder Enterprise in der Worker-Umgebung.
- Bestätigen Sie die Erweiterungen
mbstringundzlibin jeder Laufzeitumgebung, die ein PDF erstellt. - Bestätigen Sie, dass die Antwort-Header den Reverse-Proxy überstehen.
- Protokollieren Sie die PDF-Erzeugung mit Kontext. Protokollieren Sie kein Zertifikatsmaterial und keine Schlüsselpasswörter.
Konformität
Abschnitt betitelt „Konformität“- Die Verarbeitung des Queue-Payloads richtet sich nach OWASP ASVS V1.5.2.
- Die Verarbeitung des Queue-Ausgabepfads richtet sich nach OWASP ASVS V5.3.2.
- Der Locator-Entwurf folgt der Vorgabe aus PSR-11 §1.3.
Kommerzieller Kontext
Abschnitt betitelt „Kommerzieller Kontext“NextPDF Core steht unter Apache-2.0. Vertrauensanker für Signaturen und die TSA-Härtung greifen, wenn NextPDF Pro oder Enterprise installiert ist. Das CodeIgniter-Paket stellt die entsprechenden Service-Methoden bereit, die null zurückgeben, bis das passende Premium-Paket installiert ist. Siehe </get-license/?intent=codeigniter-signing>.
Siehe auch
Abschnitt betitelt „Siehe auch“- /integrations/codeigniter/production-usage/ — korrekte Queue-Registrierung und korrekter Queue-Dispatch.
- /integrations/codeigniter/configuration/ — Signier-, TSA- und Pfadschlüssel.
- /integrations/codeigniter/troubleshooting/ — geprüfte Ablehnungsmeldungen.
- /integrations/codeigniter/overview/ — vollständige API-Oberfläche.