Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/10/2006, 15h45   #1
Futur Membre du Club
 
Inscription : novembre 2005
Messages : 27
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 27
Points : 18
Points : 18
Par défaut Injection SQL, mysql_real_escape et user Nobody

Bonjour à tous,

J'ai programmé un petit script qui permet à un utilisateur de mon site ayant perdu son mot de passe de connection de pouvoir le récupérer en tapant simplement son adresse email.

Le script vérifie d'abord que le cryptogramme visuel correspond (pour éviter le brute force ou les bots), puis que le email entré figure bien dans la base de données, et seulement ensuite il envoit le mot de passe par email.

Il y a 2 pages : le formulaire d'un coté, et la page contenant le script de l'autre.

Voici le début du script de traitement.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
include "crypt/functions.php";
 
//Vérification de la validation du formulaire + remplissage du champs email
 
// Si le code généré est le même que celui qu'on a donné...
if (chk_crypt($_POST['code']))
{
 
if (isset($_POST['email']) && !empty($_POST['email'])) 
{
//Conditions remplies, connexion à la BDD
$mail=($_POST['email']);
mysql_connect("localhost", "XXXXX", "XXXXX"); // Connexion à MySQL
mysql_select_db("XXXXXX"); // Sélection de la base 
 
// Requête sur la BDD = table membre
$requete_membres = "SELECT ID, prenom, nom, email FROM tablemembre WHERE email='$mail'";
$membres = mysql_query($requete_membres) or exit(mysql_error());
$nb = mysql_num_rows($membres);

On m'a rapidement conseillé d'utiliser :
Code :
$mail=mysql_real_escape_string($_POST['email']);
Plutot que
Code :
$mail=($_POST['email']);
Ce pour éviter les injections SQL douteuses

Mon script avec $mail=($_POST['email']); marche parfaitement. Des que j'utilise l'instruction mysql_real_escape_string j'ai droit à l'erreur suivante :


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Warning: mysql_real_escape_string() [FUNCTION.mysql-real-escape-string]: Access denied FOR user 'nobody'@'localhost' (USING password: NO) IN /home/XXXXX/public_html/connexion.php ON line 13
 
Warning: mysql_real_escape_string() [FUNCTION.mysql-real-escape-string]: A link TO the server could NOT be established IN /home/XXXXX/public_html/connexion.php ON line 13
 
Warning: mysql_connect() [FUNCTION.mysql-connect]: Access denied FOR user 'root'@'localhost' (USING password: NO) IN /home/XXXXX/public_html/connexion.php ON line 14
 
Warning: mysql_select_db() [FUNCTION.mysql-select-db]: Access denied FOR user 'nobody'@'localhost' (USING password: NO) IN /home/XXXXX/public_html/connexion.php ON line 15
 
Warning: mysql_select_db() [FUNCTION.mysql-select-db]: A link TO the server could NOT be established IN /home/XXXXX/public_html/connexion.php ON line 15
 
Warning: mysql_query() [FUNCTION.mysql-query]: Access denied FOR user 'nobody'@'localhost' (USING password: NO) IN /home/XXXXX/public_html/connexion.php ON line 20
 
Warning: mysql_query() [FUNCTION.mysql-query]: A link TO the server could NOT be established IN /home/XXXXX/public_html/connexion.php ON line 20
Access denied FOR user 'nobody'@'localhost' (USING password: NO)

Quelqu'un a t il une idée du problème ? Est ce que je fais une mauvaise utilisation de l'instruction mysql_real_escape ?

Est il possible de donner des droits à l'user nobody ?

J'avoue être un peu perdu sur le coup.

Cordialement,
Philippe
Archeus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/10/2006, 16h18   #2
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 238
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 238
Points : 1 421
Points : 1 421
essaye de deplacer le mysql_connect et mysql_select_db AVANT le mysql_real_escape_string
__________________
PHP :
Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production)
Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error());
Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable.
Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/
Fladnag est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/10/2006, 19h13   #3
Futur Membre du Club
 
Inscription : novembre 2005
Messages : 27
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 27
Points : 18
Points : 18
Bonjour,

Merci pour votre réponse.

J'ai testé la manipulation que vous m'avez conseillée, sans succès. Les erreurs sont toujours les mêmes.

Cordialement,
Philippe
Archeus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/10/2006, 19h24   #4
Membre Expert
 
Inscription : janvier 2005
Messages : 1 249
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2005
Messages : 1 249
Points : 1 417
Points : 1 417
Contrairement à mysql_escape_string(), mysql_real_escape_string() demande une connexion ouverte à la bdd pour s'exécuter. Il faut donc la placer en effet après la connexion.
Les messages que tu reçois indiquent que cette connexion n'a pas pu se réaliser. Revois donc les paramètres de connexion à ta bdd.
vg33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/10/2006, 19h49   #5
Futur Membre du Club
 
Inscription : novembre 2005
Messages : 27
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 27
Points : 18
Points : 18
Merci à vous deux pour votre aide.

La solution qui m'a été donnée par Fladnag était la bonne, je n'avais pas fait attention à une bête faute de frappe dans un des paramètres de connection.

Honte à moi )

Bonne soirée à tous.

Philippe
Archeus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/10/2006, 20h48   #6
Membre Expert
 
Inscription : janvier 2005
Messages : 1 249
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2005
Messages : 1 249
Points : 1 417
Points : 1 417
Citation:
Envoyé par Archeus
La solution qui m'a été donnée par Fladnag était la bonne, je n'avais pas fait attention à une bête faute de frappe dans un des paramètres de connection.
Loin de moi l'idée de ramener la couverture à moi, mais c'est moi qui t'ai demandé de revoir tes infos de connexion :
Citation:
Envoyé par vg33
Revois donc les paramètres de connexion à ta bdd.
vg33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/10/2006, 21h15   #7
Futur Membre du Club
 
Inscription : novembre 2005
Messages : 27
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 27
Points : 18
Points : 18
Re Vg33,

Effectivement ma tournure de phrase est maladroite )

Le code contenait 2 erreurs et vous en avez chacun trouvé une

Merci à vous 2 donc !

Je passe le sujet en "résolu".
Archeus est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h11.


 
 
 
 
Partenaires

Hébergement Web