Sécurité et exploitation — NextPDF avec CodeIgniter 4
Cette page recense les menaces auxquelles cette intégration doit résister. Elle décrit les contrôles présents dans le code source du package. Elle donne les règles d’exploitation à appliquer pour un déploiement sûr.
Modèle de menace
Section intitulée « Modèle de menace »Trois surfaces peuvent être influencées par un attaquant.
- Charge utile du job de file d’attente. Une file d’attente stocke les données du job. Un attaquant disposant d’un accès au broker peut modifier ces données. Il s’agit d’une entrée désérialisée non fiable.
- Nom de fichier de la réponse. Un utilisateur peut fournir le nom du fichier téléchargé. Un nom malveillant peut injecter du contenu dans les en-têtes.
- Chemins de configuration. Le chemin des polices et les chemins de signature proviennent de la configuration. Un chemin malveillant peut entraîner une lecture ou une écriture au mauvais emplacement.
Contrôle 1 — Liste d’autorisation de la charge utile de la file d’attente
Section intitulée « Contrôle 1 — Liste d’autorisation de la charge utile de la file d’attente »Le job de file d’attente traite sa charge utile comme des données désérialisées non fiables. OWASP ASVS exige une gestion sûre des entrées pour les données désérialisées non fiables (ASVS V1.5.2).
Contrôles vérifiés dans GeneratePdfJob :
- Le builder doit être une chaîne non vide. Le job rejette les autres types.
- Le builder doit correspondre au motif
App\PdfBuilders\<Class>::<method>. Le job rejette tout autre namespace, les fonctions simples et les charges utiles préfixées ou suffixées. - Le builder doit être appelable. Le job rejette une chaîne qui correspond au motif mais ne peut pas être résolue.
Ces règles empêchent l’exécution de code arbitraire via une charge utile de file d’attente falsifiée. Les tests du package vérifient chaque cas de rejet.
Contrôle 2 — Confinement du chemin de sortie de la file d’attente
Section intitulée « Contrôle 2 — Confinement du chemin de sortie de la file d’attente »Le job écrit un fichier sur le disque. OWASP ASVS exige une gestion sûre des chemins lorsqu’une application construit des chemins de fichiers pour des opérations sur fichiers (ASVS V5.3.2).
Contrôles vérifiés dans GeneratePdfJob :
- Le chemin de sortie doit être une chaîne non vide.
- Le job normalise le chemin. Il résout les segments
.et..et convertit les séparateurs avant toute vérification. - Le chemin normalisé doit se trouver à l’intérieur de
WRITEPATH/pdfs/. Le job rejette un répertoire frère qui partage un préfixe de nom (pdfs-evil/). - Le chemin doit se terminer par
.pdf(insensible à la casse).
Ces règles empêchent l’écriture d’un fichier arbitraire via une charge utile falsifiée.
Contrôle 3 — Durcissement des en-têtes de réponse
Section intitulée « Contrôle 3 — Durcissement des en-têtes de réponse »PdfResponse attache un ensemble fixe d’en-têtes à chaque réponse PDF :
| En-tête | Valeur |
|---|---|
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 |
Le nom de fichier est nettoyé avant d’être placé dans l’en-tête. Le package retire les séparateurs de chemin, les octets nuls et les CR/LF. Il échappe les guillemets doubles dans la forme entre guillemets. Il ajoute un paramètre RFC 5987 filename*=UTF-8''… pour un nom non ASCII. Un nom vide devient document.pdf.
Contrôle 4 — Validation des chemins de configuration
Section intitulée « Contrôle 4 — Validation des chemins de configuration »Le registre de polices rejette un fontsPath qui contient un wrapper de flux (://) ou un octet nul. Il déclenche une erreur à l’exécution. Cela bloque un chemin encapsulé tel que php:// ou phar://.
Contrôle 5 — Surface minimale du localisateur de services
Section intitulée « Contrôle 5 — Surface minimale du localisateur de services »CodeIgniter 4 n’a pas de conteneur PSR-11. Il s’appuie sur le localisateur Services. PSR-11 §1.3 considère le motif de localisateur de services comme déconseillé (modal SHOULD NOT). Le package garde une surface de localisateur réduite. Chaque service passe par une seule méthode de fabrique nommée. Résous les services à la frontière du contrôleur. Passe des objets concrets vers les couches internes. Ne passe pas la classe Services dans le code métier.
Signature et opérations TSA (NextPDF Pro / Enterprise)
Section intitulée « Signature et opérations TSA (NextPDF Pro / Enterprise) »Le service de signature est inactif par défaut. Il s’active uniquement quand signature.enabled vaut true et que signature.certificate est non vide. Le niveau de signature par défaut du package est B-B. NextPDF Pro fournit la signature de base B-B. La validation à long terme est une fonctionnalité Enterprise distincte. Elle est documentée dans la référence Premium, pas ici.
Règles d’exploitation :
- Garde les fichiers de certificat et de clé hors du contrôle de version. Fournis-les via
.envou un gestionnaire de secrets. - Garde
tsa.allow_insecure_httpàfalseen production. Un canal TSA en clair n’est pas acceptable. - Définis
tsa.pinned_public_keysquand la TSA publie une clé stable. Gardetsa.warn_on_key_rotationàtrue. - Restreins l’accès en lecture au fichier de clé à l’utilisateur de l’application.
Liste de vérification de l’exploitation
Section intitulée « Liste de vérification de l’exploitation »- Épingle toutes les versions résolues dans
composer.lock. - Exige
codeigniter4/queuedans l’application qui exécute les workers. - Exécute le worker de file d’attente en tant qu’utilisateur à faibles privilèges. Donne-lui un accès en écriture à
WRITEPATH/pdfs/uniquement. - Donne au worker les mêmes extensions NextPDF que la couche web. Un PDF signé nécessite NextPDF Pro ou Enterprise dans l’environnement du worker.
- Vérifie la présence des extensions
mbstringetzlibdans chaque runtime qui construit un PDF. - Vérifie que les en-têtes de réponse survivent au reverse proxy.
- Journalise la génération de PDF avec son contexte. Ne journalise pas le matériel de certificat ni les mots de passe de clé.
Conformité
Section intitulée « Conformité »- La gestion de la charge utile de la file d’attente s’aligne sur OWASP ASVS V1.5.2.
- La gestion du chemin de sortie de la file d’attente s’aligne sur OWASP ASVS V5.3.2.
- La conception du localisateur suit les recommandations de PSR-11 §1.3.
Contexte commercial
Section intitulée « Contexte commercial »NextPDF en version de base est sous Apache-2.0. Les ancres de confiance pour la signature et le durcissement TSA s’appliquent quand NextPDF Pro ou Enterprise est installé. Le package CodeIgniter expose les méthodes de service correspondantes, qui renvoient null tant que le package Premium correspondant n’est pas installé. Voir </get-license/?intent=codeigniter-signing>.
Voir aussi
Section intitulée « Voir aussi »- /integrations/codeigniter/production-usage/ — enregistrement et dispatch corrects de la file d’attente.
- /integrations/codeigniter/configuration/ — clés de signature, TSA et de chemin.
- /integrations/codeigniter/troubleshooting/ — messages de rejet vérifiés.
- /integrations/codeigniter/overview/ — surface complète de l’API.