Injection sql

Résolu
audi68 Messages postés 571 Date d'inscription   Statut Membre Dernière intervention   -  
audi68 Messages postés 571 Date d'inscription   Statut Membre Dernière intervention   -
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 19252 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
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   Statut Membre Dernière intervention   9
 
merci de ta reponse

Mais je dois l utiliser ou et comment

Merci de ton aide
0
avion-f16 Messages postés 19252 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
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   Statut Membre Dernière intervention   9
 
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 19252 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
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   Statut Membre Dernière intervention   9
 
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   Statut Membre Dernière intervention   475
 
Remplace tes mysql_escape_string() par mysql_real_escape_string()
0
Fecal-Matter Messages postés 1 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   475
 
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   Statut Membre Dernière intervention   9
 
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   Statut Membre Dernière intervention   475
 
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   Statut Membre Dernière intervention   9
 
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   Statut Membre Dernière intervention   475
 
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   Statut Membre Dernière intervention   9
 
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   Statut Membre Dernière intervention   475
 
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   Statut Membre Dernière intervention   9
 
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   Statut Membre Dernière intervention   475
 
Pas de souci, c'est toujours un plaisir d'aider.
0
audi68 Messages postés 571 Date d'inscription   Statut Membre Dernière intervention   9
 
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