• [^] # Re: sécurité

    Posté par . En réponse au journal CWP : une interface web d'impression de fichiers PDF. Évalué à 5.

    Merci pour l'intérêt ainsi que pour ces remarques très pertinentes.

    Le PHP est mélangé au HTML généré, et les variables sont insérées par simple concaténation de chaînes de caractères. Sans même parler de faille XSS, cela signifie que si une imprimante ou une option a un nom qui contient le caractère " par exemple, tout l'affichage de la page est cassé. Je vous recommanderais d'utiliser un système de template, qui en plus régler ces problèmes, rendra le code plus lisible.

    Je n'avais que vaguement connaissance de ce système de template... Je vais regarder ça comme il faut.

    De même, le script lance des commandes sur la machine sans vérifier les arguments. Cela signifie que vous laissez n'importe quel invité exécuter n'importe quelle commande sur votre serveur.

    Là je comprends moins : la majorité des arguments sont des listes à choix, les choix étant fournis par l'administrateur. Ils y a éventuellement des champs textes, mais les principaux (les seuls jamais utiles ?) sont contrôlés (le nombre de copie doit être un entier non négatif, la liste des pages à imprimer est vérifiée directement par la commande "lp"). Finalement, toutes les commandes lancées sont échappées avec "escapeshellarg()" : là effectivement vous avez raison (je viens de relire le manuel) cette fonction devrait être utilisée sur chaque argument individuellement.

    Et le fichier de configuration est dans un langage inventé pour l'occasion, qui ressemble au json, mais n'est pas totalement compatible, à cause du système de commentaires. Je conseillerais l'utilisation d'un langage existant, comme YAML par exemple, qui supporte les commentaires.

    Je n'ai ajouté le support des commentaires que tout à la fin, ils ne sont à mon avis que très rarement utiles (sauf à avoir 10 imprimantes disponibles). Je vais regarder du côté de YAML : quitte à faire de gros changements dans le code, c'est vrai que ça vaudrait le coup d'utiliser un format standard et peut-être plus évolutif.

    Je vais essayer de trouver le temps de remettre ça au propre en suivant vos conseils. Encore merci d'avoir jeté un coup d'œil au code.