2 votes

PHP MySQL - Conseils de sanitization et de validation

Je découvre juste les filtres de validation et de nettoyage de PHP, et j'utilisais mysql_escape_string de MySQL pour éviter les injections SQL.

Maintenant je découvre que PHP peut aussi aider et je suppose que logiquement ces procédures ne sont pas exclusives dans leur fonction : c'est-à-dire que vous pouvez nettoyer et valider en PHP et arriver quand même à une situation où l'échappement est nécessaire.

Ai-je raison ou est-ce que je néglige quelque chose?

6voto

Charles Points 33585

Suis-je dans le vrai ou est-ce que j'oublie quelque chose?

Non, tu as totalement raison. Gros caractères arrivant pour les lecteurs occasionnels qui pourraient d'une manière ou d'une autre ne pas saisir le sens de ta question.

Différents types de sortie requièrent différents types de protection.

Supprimez les choses qui pourraient être du HTML, et vous serez plus en sécurité contre les XSS. Citez et échappez correctement votre entrée de base de données, et vous serez plus en sécurité contre les injections SQL. Soyez attentif aux entrées inattendues partout et vous augmenterez la sécurité de votre code.

C'est merveilleux que tu te rendes maintenant pleinement compte de cela. Trop de gens ne le font pas.

Je viens de découvrir les filtres de nettoyage et de validation de PHP

Ils sont sympas, n'est-ce pas ? Ils font partie intégrante de PHP moderne. Utilise-les religieusement et ils ne te décevront pas. Sauf pour celui sur les adresses e-mail, il échoue dans un grand nombre de cas marginaux ; je préfère is_email.

J'utilisais mysql_escape_string de MySQL pour éviter les injections SQL.

Ce n'est pas une bonne pratique de PHP moderne. J'espère également que tu utilises la fonction d'échappement de chaîne avec le mot "real" dedans, sinon tu pourrais être en difficulté.

Je pense que tu es prêt pour la prochaine étape : Apprends PDO. Elle possède des déclarations préparées et des espaces réservés pour les requêtes, qui te fourniront une protection complète et gratuite contre les injections SQL, si tu l'utilises correctement. PDO est disponible partout où des versions récentes de PHP sont disponibles. C'est intégré. Utilise-le, apprends-le, aime-le. Sinon, tu es condamné. Condamané !

0voto

NikiC Points 47270

Je vous conseillerais d'échapper à chaque bit de données que vous insérez dans une requête avec la fonction ou méthode prenant en compte l'encodage que votre extension de base de données fournit. Pour mysql_ cela serait mysql_real_escape_string (n'oubliez pas la partie real_ !).

La raison est simple : Le code évolue. Il arrive souvent que les restrictions pour une valeur soient assouplies. Imaginez que vous n'acceptiez que des caractères alphanumériques pour les noms avant et que maintenant vous voulez autoriser tous les caractères Unicode. Ainsi maintenant le ' est autorisé dans les noms aussi. Mais malheureusement vous n'avez pas utilisé la fonction mysql_real_escape_string dans votre code, car vous pensiez que les noms étaient sécurisés. Eh bien, maintenant il est trop tard, les données utilisateurs privées ont été lues et circulent maintenant sur le marché noir...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X