Modérateur PHPfrance |
10684 Messages
08 juil. 2016, 12:23
Bonjour,
Effectivement, lorsque tu utilises les requêtes préparées, les variables que tu passes par binding sont automatiquement protégées, il ne faut donc pas cumuler avec mysql_real_escape_string ou pdo::quote. En revanche, il faut absolument protéger les variables si tu passes par les requêtes classiques. Ce contrôle ne sert que si la variable est insérée en base. Si elle doit aller en session ou dans un fichier, ces protections ne sont pas nécessaires (d'autres en revanches peuvent être requises).
Pour ce qui est de l'appel de htmlspecialchars à l'affichage, plutôt qu'à l'enregistrement, il y peut y avoir plusieurs raison à ce choix. La première est que l'information en base n'est pas nécessairement destinée à de l'affichage web. L'impression pdf ou la génération de fichier d'exports pourront nécessiter de voir apparaitre le texte tel qu'il a été saisi plutôt que transformé avec des entités html. La seconde est de faciliter l'édition de la valeur saisie, là encore il est plus intéressant de proposer le texte d'origine que la valeur transformée.
Ce genre de choix dépend donc de l'usage que tu fais de la valeur enregistrée Vs les performances. C'est un peu le même principe que pour des indexes en bases de données : ils accélèrent les SELECT mais ralentissent les INSERT/UPDATE. Si ta base est d'avantage consultée que mise à jour, on mets des indexes, si elle est plus souvent mise à jour que consulter, on gagne en performance à ne pas en mettre
La chose la plus importante à retenir est qu'il ne faut jamais faire confiance à l'utilisateur et toujours contrôler les données reçues côté serveur. Si tu attends un chiffre, c'est un chiffre que tu dois recevoir, sinon c'est une faille et un pirate pourrait l'exploiter. Si un champ est désactivé mais que tu reçois quand même une valeur pour ce champ, c'est un pirate. Si les captcha ne sont pas corrects, c'est un pirate. S'il coche pas la case de recaptcha, c'est un pirate. S'il manque des champs, c'est un pirate. S'il y a des infos que tu n'attends pas, c'est un pirate... Si tout est parfait, c'est quand même un pirate, faut recontrôler !

Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...