Injection sql

Résolu/Fermé
audi68
Messages postés
571
Date d'inscription
lundi 7 janvier 2008
Statut
Membre
Dernière intervention
5 août 2015
- 12 nov. 2010 à 20:54
audi68
Messages postés
571
Date d'inscription
lundi 7 janvier 2008
Statut
Membre
Dernière intervention
5 août 2015
- 16 nov. 2010 à 21:38
Bonjour a tous,

Je ens d installer le logiciel havij surmon ordi car on me la conseiller pour tester mon site

Par contre je viens de me rendre compte que l on peut acceder a la base de donné de mon site

Que dois je faire pour bloquer l acces

J ai fait un autre site sur le meme principe que le 1er mais celui ci n a aucune faille

Meri de votre aide



12 réponses

avion-f16
Messages postés
18841
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
16 août 2022
4 410
13 nov. 2010 à 17:56
Salut.
Utilise mysql_real_escape_string pour sécuriser tes variables provenant de l'utilisateur (GET, POST et COOKIE principalement) avant d'effectuer les requêtes SQL.
0
audi68
Messages postés
571
Date d'inscription
lundi 7 janvier 2008
Statut
Membre
Dernière intervention
5 août 2015
9
13 nov. 2010 à 22:47
merci de ta reponse

Mais je dois l utiliser ou et comment

Merci de ton aide
0
avion-f16
Messages postés
18841
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
16 août 2022
4 410
13 nov. 2010 à 23:14
Par exemple :
$sql = 'SELECT COUNT(*) AS nb FROM table WHERE column="'.mysql_real_escape_string($_GET['where'].'"';

Ou :
$where = mysql_real_escape_string($_GET['where']);
$sql = 'SELECT COUNT(*) AS nb FROM table WHERE column="'.$where.'";
0
audi68
Messages postés
571
Date d'inscription
lundi 7 janvier 2008
Statut
Membre
Dernière intervention
5 août 2015
9
13 nov. 2010 à 23:23
Merci de ta reponse

mais je ne vois pas trop comment tu utilise ton where

sur mon exemple tu me conseil comment?

$sql = 'INSERT INTO vision (id, nom, serie, batie, adresse, cp, ville, département, tel, portable, demande, m2, caveradier, decoré, couvert, terrain, quand, serie, connu) VALUES("", "'.mysql_escape_string($_POST['f_1']).'", "'.mysql_escape_string($_POST['f_2']).'", "'.mysql_escape_string($_POST['f_3']).'", "'.mysql_escape_string($_POST['f_15']).'", "'.mysql_escape_string($_POST['f_16']).'", "'.mysql_escape_string($_POST['f_17']).'", "'.mysql_escape_string($_POST['f_4']).'", "'.mysql_escape_string($_POST['f_5']).'", "'.mysql_escape_string($_POST['f_18']).'", "'.mysql_escape_string($_POST['f_6']).'", "'.mysql_escape_string($_POST['f_7']).'", "'.mysql_escape_string($_POST['f_8']).'", "'.mysql_escape_string($_POST['f_9']).'", "'.mysql_escape_string($_POST['f_10']).'", "'.mysql_escape_string($_POST['f_11']).'", "'.mysql_escape_string($_POST['f_12']).'", "'.mysql_escape_string($_POST['f_13']).'", "'.
mysql_escape_string($_POST['f_14']).'" )';
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());

exit();

Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
avion-f16
Messages postés
18841
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
16 août 2022
4 410
14 nov. 2010 à 13:10
Comme tu l'as fait, c'est correct.
Si tu veux alléger un peu tes requête, il faudra stocker le résultat de mysql_real_escape_string() dans des variables. Dans mon exemple, j'en avais qu'une seule : $where. Mais sur le tiens, tu auras besoin d'autant de variables que de mysql_real_escape_string().

Pour rendre ton code plus clair, je te propose de faire comme ceci. C'est plus long mais ça facilite la lecture :
$sql = 'INSERT INTO vision (
	id,
	nom,
	serie,
	batie,
	adresse,
	cp,
	ville,
	département,
	tel,
	portable,
	demande,
	m2,
	caveradier,
	decoré,
	couvert,
	terrain,
	quand,
	serie,
	connu
) VALUES(
	"",
	"'.mysql_escape_string($_POST['f_1']).'",
	"'.mysql_escape_string($_POST['f_2']).'",
	"'.mysql_escape_string($_POST['f_3']).'",
	"'.mysql_escape_string($_POST['f_15']).'",
	"'.mysql_escape_string($_POST['f_16']).'",
	"'.mysql_escape_string($_POST['f_17']).'",
	"'.mysql_escape_string($_POST['f_4']).'",
	"'.mysql_escape_string($_POST['f_5']).'",
	"'.mysql_escape_string($_POST['f_18']).'",
	"'.mysql_escape_string($_POST['f_6']).'",
	"'.mysql_escape_string($_POST['f_7']).'",
	"'.mysql_escape_string($_POST['f_8']).'",
	"'.mysql_escape_string($_POST['f_9']).'",
	"'.mysql_escape_string($_POST['f_10']).'",
	"'.mysql_escape_string($_POST['f_11']).'",
	"'.mysql_escape_string($_POST['f_12']).'",
	"'.mysql_escape_string($_POST['f_13']).'",
	"'. mysql_escape_string($_POST['f_14']).'"
)'; 
	
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error()); 
0
audi68
Messages postés
571
Date d'inscription
lundi 7 janvier 2008
Statut
Membre
Dernière intervention
5 août 2015
9
14 nov. 2010 à 16:15
OK merci effectivement c est plus clair comme ca

On va faire plus simple je prends seulement sur 2 requete mais je ne vois pas ou utiliser ta variable "'.mysql_real_escape_string($_GET['where'].'"

$sql = 'INSERT INTO vision (
id,
nom,
) VALUES(
"",
"'.mysql_escape_string($_POST['f_1']).'",
"'.mysql_escape_string($_POST['f_2']).'",
)';

mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());

Encore une question pour fermer ma requete je dois utiliser
exit();

ou
mysql_close();

Merci beaucoup de ton aide
0
arthezius
Messages postés
3538
Date d'inscription
jeudi 15 mai 2008
Statut
Membre
Dernière intervention
11 septembre 2016
472
14 nov. 2010 à 16:36
Remplace tes mysql_escape_string() par mysql_real_escape_string()
0
Fecal-Matter
Messages postés
1
Date d'inscription
dimanche 14 novembre 2010
Statut
Membre
Dernière intervention
14 novembre 2010

14 nov. 2010 à 16:54
Pour se protéger, toute les données envoyés par l'utilisateur doivent être passées par mysql_escape_string(), et intval() si c'est des données numériques.
0
arthezius
Messages postés
3538
Date d'inscription
jeudi 15 mai 2008
Statut
Membre
Dernière intervention
11 septembre 2016
472
14 nov. 2010 à 17:38
mysql_escape_string(): Cette fonction est OBSOLETE depuis PHP 5.3.0. Nous vous encourageons vivement à ne plus l'utiliser.
A remplacer donc par mysql_real_escape_string()
0
audi68
Messages postés
571
Date d'inscription
lundi 7 janvier 2008
Statut
Membre
Dernière intervention
5 août 2015
9
14 nov. 2010 à 18:58
Merci de votre reponse je viens de la changer et ca fonctionne

Par contre je suis entrain de modifier mes autres formules et la ca coince


actuel
$requete1 = mysql_query("SELECT * FROM $table_name WHERE serie='$serie' ORDER BY $table_col ASC LIMIT ".$limite1.", ".$limite2."") or die(mysql_error());

modification
$requete1 = mysql_query("SELECT * FROM $table_name WHERE serie="'.mysql_real_escape_string('serie').'" ORDER BY $table_col ASC LIMIT ".$limite1.", ".$limite2."") or die(mysql_error());


Par contre pour cette question vous ne m avez pas donne de reponse

ncore une question pour fermer ma requete je dois utiliser
exit();

ou
mysql_close();



Merci de votre aide
0
arthezius
Messages postés
3538
Date d'inscription
jeudi 15 mai 2008
Statut
Membre
Dernière intervention
11 septembre 2016
472
14 nov. 2010 à 19:21
actuel
$requete1 = mysql_query("SELECT * FROM $table_name WHERE serie='$serie' ORDER BY $table_col ASC LIMIT ".$limite1.", ".$limite2."") or die(mysql_error());


modification
$requete1 = mysql_query("SELECT * FROM $table_name WHERE serie="'.mysql_real_escape_string('serie').'" ORDER BY $table_col ASC LIMIT ".$limite1.", ".$limite2."") or die(mysql_error()); 


Dans le premier cas tu utilises une variable ($serie) et pas dans le deuxième...
Je dirai que c'est donc à modifier en:
$requete1 = mysql_query("SELECT * FROM $table_name WHERE serie="'.mysql_real_escape_string($serie).'" ORDER BY $table_col ASC LIMIT ".$limite1.", ".$limite2."") or die(mysql_error()); 
0
audi68
Messages postés
571
Date d'inscription
lundi 7 janvier 2008
Statut
Membre
Dernière intervention
5 août 2015
9
14 nov. 2010 à 21:55
merci de ta reponse mais j avais aussi essaier

voici l erreur

Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in

Merci
0
arthezius
Messages postés
3538
Date d'inscription
jeudi 15 mai 2008
Statut
Membre
Dernière intervention
11 septembre 2016
472
14 nov. 2010 à 22:24
Après le in tu as le numéro de ligne.
Quelle est la ligne correspondante?

Si c'est celle avec la requête, je t'invite à la réécrire de la manière suivante:
$requete1 = mysql_query('SELECT * FROM '.$table_name.' WHERE serie="'.mysql_real_escape_string($serie).'" ORDER BY '.$table_col.' ASC LIMIT '.$limite1.', '.$limite2.'') or die(mysql_error());
0
audi68
Messages postés
571
Date d'inscription
lundi 7 janvier 2008
Statut
Membre
Dernière intervention
5 août 2015
9
14 nov. 2010 à 22:47
merci de ta reponse effectivement maintenant ca fonctionne

La nouvel ecriture que tu m as donner correspond a quoi php5?

Pour la fermeture de la base de donne le mieu est exit() ou mysql_close();


Merci pour ton aide
0
arthezius
Messages postés
3538
Date d'inscription
jeudi 15 mai 2008
Statut
Membre
Dernière intervention
11 septembre 2016
472
14 nov. 2010 à 23:04
Mon ecriture est simplement une autre manière d'écrire.
On peu écrire par exemple:
echo 'ok';

ou
echo "ok";


Pour fermer la connexion il faut utiliser mysql_close();
exit();
va simplement arrêter un script.
Exemple:
echo 'start';
exit();
echo 'end';

"end" ne sera pas écrit.
0
audi68
Messages postés
571
Date d'inscription
lundi 7 janvier 2008
Statut
Membre
Dernière intervention
5 août 2015
9
15 nov. 2010 à 22:07
Merci de ton aide

JE vais modifier toutes mes pages et je te tiens au courant

Merci pour tous
0
arthezius
Messages postés
3538
Date d'inscription
jeudi 15 mai 2008
Statut
Membre
Dernière intervention
11 septembre 2016
472
16 nov. 2010 à 05:36
Pas de souci, c'est toujours un plaisir d'aider.
0
audi68
Messages postés
571
Date d'inscription
lundi 7 janvier 2008
Statut
Membre
Dernière intervention
5 août 2015
9
16 nov. 2010 à 21:38
Voila je veins de modifier tous mes fichier j ai refait le test avec havij et je n est plus acces a ma base de donné niquel merci

Maintenant j aimerais savoir si mon site est sur et si tu connais d autre logiciel d injection sql pour tester tous cela

Merci de ton aide
0