Aller au menu - Aller au contenu

Bonne protection faille SQL ?

Requête préparée

Pour accéder à cette section
Connectez-vous !
connexion_rpx

Résolu Le problème de ce sujet a été résolu

Offre d'emploi : Développeur Web PHP/Drupal (H/F)

Page 1 
Auteur Message
2 visiteurs sur ce sujet (2 anonymes)
Page 1 
Hors ligne Jacksons # Posté le 08/02/2012 à 18:39:35

Voilà qu'on ai lu le tuto de Matéo, fait des études en info ou lu des articles sur le net, la plupart d'entre nous est au courant de l'existence de la fameuse faille d'injection SQL. Cependant s'en protéger est une autre histoire. J'ai lu de multiples articles sur le net et une méthode efficace pour se protéger de la faille SQL revient souvent : Les requêtes préparées. Sachant que j'utilise PDO, est ce que si j'applique ce type de code sur TOUTES mes requêtes, je me protège efficacement ou alors est-ce qu'il me manque des choses importantes ?

Voilà ce code par exemple va chercher la dernière actualité en date dans ma bdd

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
<?php 
        
        //Je prépare ma requête
        $query = 'SELECT * FROM actualités ORDER BY ID DESC LIMIT 0,1';
        $reponse = $bdd->prepare($query);
         
        //Je vérifie que actualités soit bien une chaîne de caractère et que ID et LIMIT soient des nombres
	$reponse->bindValue('actualités', PDO::PARAM_STR);
	$reponse->bindValue('ID', PDO::PARAM_INT);
	$reponse->bindValue('LIMIT', PDO::PARAM_INT);
	
	//J'éxécute la requête

	$reponse->execute(array($query)); ?>


Ce code marche, là n'est pas la question, mais est-il sécuritaire ? Me protège t-il aussi par exemple de l'insertion des guillemets dans la requête, ce qui était anciennement protégé par les "guillemets magiques" ?

Merci pour vos réponses !
Publicité # Posté le 08/02/2012 à 18:39:35

Hors ligne philodick # Posté le 08/02/2012 à 18:45:22
Avatar

Non, ton code n'a pas de sens, tu devrais 'binder' des valeurs, pas des colonnes de ta table.
De toute façon, dans ton cas, il n'y a pas de problème de faille puisque tu n'utilises aucune donnée 'extérieure'.
Hors ligne Jacksons # Posté le 08/02/2012 à 18:54:15

Tout d'abord merci pour ta réponse.

Si je comprend bien ce que tu veux dire, en gros les bindValue s'utilisent uniquement pour les requêtes qui introduisent des nouvelles données dans la bdd fournies par l'utilisateur ?

Mais par exemple si un utilisateur s'inscrit et que je laisse le droit de mettre des chiffres et des lettres dans son pseudo, je n'ai pas besoin de mettre de bindValue même si je récupère et affiche son pseudo ?
Édité le 08/02/2012 à 18:54:37 par Jacksons
Hors ligne philodick # Posté le 08/02/2012 à 18:59:17
Avatar

En gros, oui. Tant que ta requête ne comporte pas de données transmises par l'utilisateur, il ne peut y insérer de code malicieux.
Hors ligne Jacksons # Posté le 08/02/2012 à 19:07:47

D'accord, donc en gros si j'affiche des actualités que je suis seul à créer dans ma base de données, le pirate n'a aucun moyen de les transformer en chiffre ou d'en modifier le contenu par exemple. Il faut obligatoirement qu'il ait à rentrer des données qui s'inscrivent dans la bdd via une requête pour qu'il puisse exploiter une faille, c'est un bon résumé ?

Et donc les requêtes préparées sont vraiment un moyen efficace de se protéger contre cette faille SQL ?


Déso pour toutes ces questions, mais la sécurité PHP fait encore partie de ces trucs que j'essaie de bien éclaircir
Hors ligne philodick # Posté le 08/02/2012 à 19:12:08
Avatar

Oui, c'est un bon moyen parce que ça fait traiter les données envoyées comme des chaînes de caractères ou des valeurs numériques par la requête, et non pas comme des instructions SQL.
Hors ligne Jacksons # Posté le 08/02/2012 à 19:15:25

Ah ouai ok, je comprend mieux son efficacité.

En tout cas merci pour ton aide, je vais de ce pas reprendre toutes mes requêtes afin qu'elles soient préparées !

Retour au forum "PHP" ou à la liste des forums

Pour accéder à cette section
Connectez-vous !
connexion_rpx