Page 1 sur 1

sécuriser requete PDO

Posté : 03 mai 2019, 18:49
par jp.bond
Bonjour,
j'ai lu des articles sur le fait qu'il fallait sécuriser ses requetes, et que PDO avec prepare() permettait de renforcer la sécurité.

J'ai un petit bout de code pour exemple :

Code : Tout sélectionner

// je récupère mon id passé dans la page par : http://www.monsite.fr/projet-details.php?id=12 $id = $_GET['id']; $sql_produits = "SELECT * FROM produits WHERE id=:id"; $req_produits = $pdo->prepare($sql_produits); $req_produits->bindParam(':id', $id, PDO::PARAM_INT); $req_produits->execute(); $enr_produits = $req_produits->fetch();
Ma question :
si j'ai fait :

Code : Tout sélectionner

// en passant ce paramêtre je pense que j'ai protégé le fait qu'un petit malin passe autre chose qu'un entier dans la var $id $req_produits->bindParam(':id', $id, PDO::PARAM_INT);
est ce que c'est juste ?
Et si oui, quand je teste par exemple id=toto, je n'ai pas de message d'erreur... est ce normal ?

Est ce qu'il serait préférable d'ajouter quand même dès le départ quelque chose comme :

Code : Tout sélectionner

$id = htmlspecialchars($id);
voire

Code : Tout sélectionner

if (!is_int ($id)) echo 'Erreur';
ou tout ceci fait doublon ?
merci de votre aide

Re: sécuriser requete PDO

Posté : 03 mai 2019, 22:34
par @rthur
Il est toujours préférable de contrôler _toutes_ les variables que tu reçois de ton utilisateur pour être sûr que ce soit bien ce que tu attends comme valeur avant de les traiter.
PHP a une fonction très pratique pour cela, c'est filter_var()
http://php.net/filter_var

Tu peux utiliser avec cette fonction différents filtres, qui sont de 2 types principalement :
- Filtres de validation : si la valeur ne correspond pas à ce qui est attendu, alors on rejette tout ce qui est envoyé
- Filtres de nettoyage : on supprime les caractères inattendus pour ne garder que les voulus
Tu as le détail ici : https://www.php.net/manual/fr/filter.filters.php