Erreur de syntaxe SQL près de...
Résolu/Fermé
kategriss
Messages postés
9
Date d'inscription
mardi 1 avril 2008
Statut
Membre
Dernière intervention
14 novembre 2014
-
3 avril 2008 à 15:01
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 - 4 avril 2008 à 11:24
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 - 4 avril 2008 à 11:24
A voir également:
- Erreur de syntaxe SQL près de...
- Erreur 0x80070643 - Guide
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Guide
- Erreur 1001 outlook - Guide
- Erreur 3000 france tv - Forum Lecteurs et supports vidéo
- Play store erreur de serveur ✓ - Forum Free mobile
2 réponses
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
3 avril 2008 à 15:05
3 avril 2008 à 15:05
Bonjour,
Il me semble que FORCE peut être un mot réservé.
N'hésite pas à protéger tes noms de colonnes et de table en utilisant des `force`
(alt gr + 7)
Xavier
Il me semble que FORCE peut être un mot réservé.
N'hésite pas à protéger tes noms de colonnes et de table en utilisant des `force`
(alt gr + 7)
Xavier
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 657
3 avril 2008 à 15:07
3 avril 2008 à 15:07
C'est beau, c'est frai, ça sent le site web piratable à volonté.
Enfin bon, met un espace juste avant ton SET et juste avant ton WHERE pour voir si ça passe.
Enfin bon, met un espace juste avant ton SET et juste avant ton WHERE pour voir si ça passe.
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
4 avril 2008 à 11:24
4 avril 2008 à 11:24
Effectivement, comme le dit SebSauvage, ton site a de bonnes chances d'être ouvert aux injections SQL (forme de piratage très facile à mettre en oeuvre qui permet d'exécuter n'importe quelle requête sur ta base... Y compris des Drop Table !)
Enfin, tout dépend de comment tu as enregistré le user_id dans ta session.
Mais imagine qu'un utilisateur s'enregistre sous le nom : « '; DROP TABLE persos »
Nom bizarre, tu me diras, mais que devient alors ta requête telle qu'envoyée au serveur ?
mysql_query("UPDATE persos
SET force='" . $force . "'
WHERE id_user='" . $_SESSION['id_user'] . "'")or die(mysql_error());
devient
UPDATE persos SET force='12' WHERE id_user = ''; DROP TABLE persos
MySQL va donc voir, en fait, deux requêtes, dont la deuxième... détruit ta table !
Il faut IMPÉRATIVEMENT utiliser, comme tu l'évoques, mysql_real_escape_string :
mysql_query("UPDATE persos
SET force='" . $force . "'
WHERE id_user='" . mysql_real_escape_string($_SESSION['id_user']) . "'")or die(mysql_error());
Enfin, tout dépend de comment tu as enregistré le user_id dans ta session.
Mais imagine qu'un utilisateur s'enregistre sous le nom : « '; DROP TABLE persos »
Nom bizarre, tu me diras, mais que devient alors ta requête telle qu'envoyée au serveur ?
mysql_query("UPDATE persos
SET force='" . $force . "'
WHERE id_user='" . $_SESSION['id_user'] . "'")or die(mysql_error());
devient
UPDATE persos SET force='12' WHERE id_user = ''; DROP TABLE persos
MySQL va donc voir, en fait, deux requêtes, dont la deuxième... détruit ta table !
Il faut IMPÉRATIVEMENT utiliser, comme tu l'évoques, mysql_real_escape_string :
mysql_query("UPDATE persos
SET force='" . $force . "'
WHERE id_user='" . mysql_real_escape_string($_SESSION['id_user']) . "'")or die(mysql_error());
3 avril 2008 à 15:22
C'était en effet ça, force était réservé alors j'ai mis forc à la place et ça marche très bien.
Par contre je suis encore un peu débutante en PHP/MySQL alors que veux-tu dire par
protéger tes noms de colonnes et de table en utilisant des `force` ?
Appliquer un mysql_real_escape_string et/ou un htmlspecialchars ne suffit pas ?
Merci encore :)
3 avril 2008 à 17:42
La « protection », c'est le fait de mettre des ` autour de tes noms de colonne !
Ce n'était pas la peine de renommer ta colonne, il suffisait d'écrire « `force` » au lieu de « force » à chaque fois que tu voulais utiliser cette colonne !
Enfin bon, l'important, c'est que ça fonctionne...
3 avril 2008 à 21:40
Merci pour ton aide :)
La prochaine fois je me servirais de la protection mais cette fois-ci ce n'était pas gênant de renommer ma colonne ;)