Ga naar inhoud

Beveiliging en beheer voor NextPDF op CodeIgniter 4

Deze pagina beschrijft de dreigingen waartegen deze integratie bestand moet zijn, de maatregelen die in de broncode van het pakket zijn geverifieerd en de operationele regels die je moet volgen voor een veilige implementatie.

Je moet rekening houden met drie aanvalsoppervlakken waarop een aanvaller invloed kan hebben.

  1. Payload van de wachtrijtaak. Een wachtrij slaat taakgegevens op. Een aanvaller met toegang tot de broker kan die gegevens wijzigen. Behandel ze als niet-vertrouwde, gedeserialiseerde invoer.
  2. Bestandsnaam van de respons. Een gebruiker kan de downloadbestandsnaam opgeven. Een kwaadaardige naam kan headerinhoud injecteren.
  3. Configuratiepaden. Het lettertypepad en de ondertekeningspaden komen uit de configuratie. Een kwaadaardig pad kan lezen vanaf of schrijven naar de verkeerde locatie.

Maatregel 1 — Allowlist voor wachtrijpayload

Sectie met titel “Maatregel 1 — Allowlist voor wachtrijpayload”

De wachtrijtaak behandelt de payload als niet-vertrouwde, gedeserialiseerde gegevens. De Application Security Verification Standard (ASVS) van het Open Worldwide Application Security Project (OWASP) vereist veilige invoerverwerking voor gedeserialiseerde, niet-vertrouwde gegevens (ASVS V1.5.2).

Geverifieerde maatregelen in GeneratePdfJob:

  • De builder moet een niet-lege string zijn. De taak weigert elk ander type.
  • De builder moet voldoen aan het patroon App\PdfBuilders\<Class>::<method>. De taak weigert elke andere namespace, gewone functies en payloads met een prefix of suffix.
  • De builder moet aanroepbaar zijn. De taak weigert een string die aan het patroon voldoet maar niet kan worden geresolved.

Samen blokkeren deze regels willekeurige code-uitvoering via een gemanipuleerde wachtrijpayload. De tests van het pakket controleren elk weigeringsgeval.

Maatregel 2 — Beperking van het uitvoerpad van de wachtrij

Sectie met titel “Maatregel 2 — Beperking van het uitvoerpad van de wachtrij”

De taak schrijft een bestand naar schijf. OWASP ASVS vereist een veilige verwerking van paden wanneer een toepassing bestandspaden aanmaakt voor bestandsbewerkingen (ASVS V5.3.2).

Geverifieerde maatregelen in GeneratePdfJob:

  • Het uitvoerpad moet een niet-lege string zijn.
  • De taak normaliseert het pad vóór elke controle. Daarbij herleidt de taak .- en ..-segmenten en zet zij de scheidingstekens om.
  • Het genormaliseerde pad moet binnen WRITEPATH/pdfs/ vallen. De taak weigert een map op hetzelfde niveau die dezelfde naamprefix deelt (pdfs-evil/).
  • Het pad moet eindigen op .pdf (hoofdletterongevoelig).

Deze regels blokkeren willekeurige bestandsschrijfacties via een gemanipuleerde payload.

PdfResponse voegt een vaste, verharde set headers toe aan elke Portable Document Format (PDF)-respons:

HeaderWaarde
X-Content-Type-Optionsnosniff
X-Frame-OptionsDENY
Content-Security-Policydefault-src 'none'
X-Robots-Tagnoindex, nofollow
Referrer-Policyno-referrer
Cache-Controlprivate, max-age=0, must-revalidate

Het pakket saneert de bestandsnaam voordat deze in de header terechtkomt. Het verwijdert padscheidingstekens, nulbytes en carriage return/line feed (CR/LF). Het escapet dubbele aanhalingstekens voor de vorm tussen aanhalingstekens. Het voegt een Request for Comments (RFC) 5987-filename*=UTF-8''…-parameter toe voor een niet-ASCII-naam. Een lege naam wordt document.pdf.

Maatregel 4 — Validatie van configuratiepaden

Sectie met titel “Maatregel 4 — Validatie van configuratiepaden”

Het lettertyperegister weigert een fontsPath-waarde die een stream wrapper (://) of een nulbyte bevat. Het werpt een runtimefout op. Dit blokkeert wrapper-paden zoals php:// of phar://.

Maatregel 5 — Minimaal oppervlak van de servicelocator

Sectie met titel “Maatregel 5 — Minimaal oppervlak van de servicelocator”

CodeIgniter 4 biedt geen PHP Standards Recommendation 11 (PSR-11)-container. Het gebruikt een Services-locator. PSR-11 §1.3 raadt het servicelocator-patroon af (modaal SHOULD NOT). Het pakket houdt het oppervlak van de locator klein: elke service heeft één benoemde factory-methode. Resolve services aan de controllergrens. Geef concrete objecten naar binnen door. Geef de Services-klasse niet door aan domeincode.

Ondertekening en TSA-operaties (NextPDF Pro / Enterprise)

Sectie met titel “Ondertekening en TSA-operaties (NextPDF Pro / Enterprise)”

De ondertekeningsservice blijft standaard inactief. Deze wordt alleen geactiveerd wanneer signature.enabled true is en signature.certificate niet leeg is. Het standaardniveau voor handtekeningen van het pakket is B-B. NextPDF Pro levert de B-B-baselinehandtekening. Validatie op lange termijn is een afzonderlijke Enterprise-functie, die wordt gedocumenteerd in de Premium-referentie en niet hier.

Operationele regels:

  • Houd certificaat- en sleutelbestanden buiten versiebeheer. Lever ze aan via .env of een secrets manager.
  • Laat tsa.allow_insecure_http in productie op false staan. Een onversleuteld Time Stamping Authority (TSA)-kanaal is niet acceptabel.
  • Stel tsa.pinned_public_keys in wanneer de TSA een stabiele sleutel publiceert. Houd tsa.warn_on_key_rotation op true staan.
  • Beperk leestoegang tot het sleutelbestand tot de toepassingsgebruiker.
  • Pin alle vastgelegde versies in composer.lock.
  • Vereis codeigniter4/queue in de toepassing die workers uitvoert.
  • Voer de wachtrijworker uit als een gebruiker met beperkte rechten. Geef deze uitsluitend schrijftoegang tot WRITEPATH/pdfs/.
  • Geef de worker dezelfde NextPDF-extensies als de weblaag. Een ondertekende PDF heeft NextPDF Pro of Enterprise nodig in de workeromgeving.
  • Controleer of de mbstring- en zlib-extensies beschikbaar zijn in elke runtime die een PDF opbouwt.
  • Controleer of de responsheaders de reverse proxy overleven.
  • Log de PDF-generatie met context. Log geen certificaatmateriaal of sleutelwachtwoorden.
  • De verwerking van de wachtrijpayload sluit aan op OWASP ASVS V1.5.2.
  • De verwerking van het uitvoerpad van de wachtrij sluit aan op OWASP ASVS V5.3.2.
  • Het ontwerp van de locator volgt de richtlijnen van PSR-11 §1.3.

NextPDF core is gelicentieerd onder Apache-2.0. Trust anchors voor handtekeningen en TSA-verharding zijn van toepassing wanneer NextPDF Pro of Enterprise is geïnstalleerd. Het CodeIgniter-pakket stelt de bijbehorende servicemethoden beschikbaar, die null retourneren totdat het bijbehorende Premium-pakket is geïnstalleerd. Zie </get-license/?intent=codeigniter-signing>.

  • /integrations/codeigniter/production-usage/ — correcte registratie en dispatch van de wachtrij.
  • /integrations/codeigniter/configuration/ — ondertekening, TSA en padsleutels.
  • /integrations/codeigniter/troubleshooting/ — geverifieerde weigeringsberichten.
  • /integrations/codeigniter/overview/ — volledig API-oppervlak.