Est ce sécurisé de concaténer dans une requête sql ?
Fermé
ZombieBot0001
Messages postés
41
Date d'inscription
samedi 20 juillet 2019
Statut
Membre
Dernière intervention
26 septembre 2019
-
7 sept. 2019 à 20:18
jordane45 Messages postés 38326 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 décembre 2024 - 10 sept. 2019 à 10:18
jordane45 Messages postés 38326 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 décembre 2024 - 10 sept. 2019 à 10:18
A voir également:
- Est ce sécurisé de concaténer dans une requête sql ?
- Mode sécurisé samsung - Guide
- Exemple de mot de passe sécurisé - Guide
- Concatener deux cellules excel - Guide
- Requête sql date supérieure à ✓ - Forum Programmation
- Concaténer pdf - Guide
4 réponses
jordane45
Messages postés
38326
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 décembre 2024
4 712
7 sept. 2019 à 20:39
7 sept. 2019 à 20:39
Bonjour,
Le mieux est d'utiliser le BINDING de variables si tu travailles en mysqli ou les requêtes préparées si tu bosses en PDO
Par contre, le binding (ou les requêtes préparées) ne fonctionnent que pour les variables que tu utilises dans le WHERE de tes requêtes..... pour ce qui est du FROM , là tu n'as pas d'autres choix
Bien entendu, le risque ne dépend, en réalité, que de la provenance des variables....
Si elles sont accessible à l'utilisateur (soit car elles proviennent d'un formulaire html soit car elles sont envoyées via l'url )
Le mieux est d'utiliser le BINDING de variables si tu travailles en mysqli ou les requêtes préparées si tu bosses en PDO
Par contre, le binding (ou les requêtes préparées) ne fonctionnent que pour les variables que tu utilises dans le WHERE de tes requêtes..... pour ce qui est du FROM , là tu n'as pas d'autres choix
Bien entendu, le risque ne dépend, en réalité, que de la provenance des variables....
Si elles sont accessible à l'utilisateur (soit car elles proviennent d'un formulaire html soit car elles sont envoyées via l'url )
ZombieBot0001
Messages postés
41
Date d'inscription
samedi 20 juillet 2019
Statut
Membre
Dernière intervention
26 septembre 2019
7 sept. 2019 à 20:47
7 sept. 2019 à 20:47
Dans mon cas, la variable pour le FROM provient du formulaire...
Que faut-il faire pour sécuriser cela ?
Que faut-il faire pour sécuriser cela ?
jordane45
Messages postés
38326
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 décembre 2024
4 712
8 sept. 2019 à 11:04
8 sept. 2019 à 11:04
Et bien.. dans ton formulaire tu proposes un "select" (une liste déroulante) avec le nom de tes tables et renvoyant vers un ID
et côté php tu gères avec des if/else ou un SWITCH l'écriture du nom "réel" de ta table
Par exemple
et côté php
NB: Tu sembles bosser en PDO.. je t'invite donc à lire et à appliquer ce qui est indiqué ici : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Et également, vu que tu sembles débutant...ceci :
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
et pour finir, ça ne fait pas de mal.. ) ça :
https://forums.commentcamarche.net/forum/affich-37584944-php-html-caracteres-accentues-et-l-utf8
Voila.
https://www.commentcamarche.net/infos/25917-forum-ccm-mode-d-emploi-marquer-mon-sujet-comme-resolu/
et côté php tu gères avec des if/else ou un SWITCH l'écriture du nom "réel" de ta table
Par exemple
<select name="table"> <option value="1">Ma table 1</option> <option value="2">Ma table 2</option> </select>
et côté php
$table = !empty($_POST['table']) ? $_POST['table'] : NULL; switch($table){ case 1: $laTable= "tabletoto"; break; case 2: $laTable= "tabletruc"; break; default: echo "Table inconnue !!"; break; } $sql = "'SELECT * FROM `'.$laTable.'`"; try{ $ddb['f']->execute($sql); }catch(Exception $e){ echo "<br> Erreur dans la requête : <br>".$sql; echo "<br> Erreur : ". $e->getMessage(); }
NB: Tu sembles bosser en PDO.. je t'invite donc à lire et à appliquer ce qui est indiqué ici : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Et également, vu que tu sembles débutant...ceci :
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
et pour finir, ça ne fait pas de mal.. ) ça :
https://forums.commentcamarche.net/forum/affich-37584944-php-html-caracteres-accentues-et-l-utf8
Voila.
https://www.commentcamarche.net/infos/25917-forum-ccm-mode-d-emploi-marquer-mon-sujet-comme-resolu/
ZombieBot0001
Messages postés
41
Date d'inscription
samedi 20 juillet 2019
Statut
Membre
Dernière intervention
26 septembre 2019
8 sept. 2019 à 12:20
8 sept. 2019 à 12:20
J'ai besoin que l'utilisateur puisse choisir (En saisissant une chaîne de caractères) une table parmi des millions...
ZombieBot0001
Messages postés
41
Date d'inscription
samedi 20 juillet 2019
Statut
Membre
Dernière intervention
26 septembre 2019
8 sept. 2019 à 12:22
8 sept. 2019 à 12:22
En réfléchissant bien, j'ai peut être trouvé la solution : il suffit de d'empêcher l'utilisateur de saisir des back quotes, mais je ne sais pas si c'est sécurisé...
ZombieBot0001
Messages postés
41
Date d'inscription
samedi 20 juillet 2019
Statut
Membre
Dernière intervention
26 septembre 2019
8 sept. 2019 à 18:36
8 sept. 2019 à 18:36
Est-ce sécurisé de supprimer les back quotes pour sécuriser la requête ?
jordane45
Messages postés
38326
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 décembre 2024
4 712
>
ZombieBot0001
Messages postés
41
Date d'inscription
samedi 20 juillet 2019
Statut
Membre
Dernière intervention
26 septembre 2019
8 sept. 2019 à 19:09
8 sept. 2019 à 19:09
Le plus propre serait alors de faire un autocomplete.
Ainsi tu laisses la "liberté" de saisir le le nom d'une table qui existe réellement.... sans laisser à l'utilisateur la possibilité d'écrire n'importe quoi.
Côté code, tu peux aussi, avant ta requête SELECT, t'assurer que le nom de la table existe...
Cela sécuriserait un minimum....
Ainsi tu laisses la "liberté" de saisir le le nom d'une table qui existe réellement.... sans laisser à l'utilisateur la possibilité d'écrire n'importe quoi.
Côté code, tu peux aussi, avant ta requête SELECT, t'assurer que le nom de la table existe...
Cela sécuriserait un minimum....
ZombieBot0001
Messages postés
41
Date d'inscription
samedi 20 juillet 2019
Statut
Membre
Dernière intervention
26 septembre 2019
8 sept. 2019 à 19:46
8 sept. 2019 à 19:46
Seulement enlever les back quotes et vérifier si la table existes est-il suffisant ?
jordane45
Messages postés
38326
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
2 décembre 2024
4 712
10 sept. 2019 à 10:18
10 sept. 2019 à 10:18
Je reviens sur un message précédent...
Tu indiques :
Là... je vois deux soucis ...
Primo... comment peux tu avoir des "millions" de tables dans ta bdd ?
Secondo.. qu'est-ce qui justifie qu'un utilisateur puisse avoir accès à cette liste de tables ?
Tu indiques :
J'ai besoin que l'utilisateur puisse choisir (En saisissant une chaîne de caractères) une table parmi des millions
Là... je vois deux soucis ...
Primo... comment peux tu avoir des "millions" de tables dans ta bdd ?
Secondo.. qu'est-ce qui justifie qu'un utilisateur puisse avoir accès à cette liste de tables ?