Injection sql

Résolu
audi68 Messages postés 626 Statut Membre -  
audi68 Messages postés 626 Statut Membre -
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 20367 Statut Contributeur 4 509
 
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 626 Statut Membre 9
 
merci de ta reponse

Mais je dois l utiliser ou et comment

Merci de ton aide
0
avion-f16 Messages postés 20367 Statut Contributeur 4 509
 
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 626 Statut Membre 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 20367 Statut Contributeur 4 509
 
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 626 Statut Membre 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 3756 Statut Membre 475
 
Remplace tes mysql_escape_string() par mysql_real_escape_string()
0
Fecal-Matter Messages postés 1 Statut Membre
 
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 3756 Statut Membre 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 626 Statut Membre 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 3756 Statut Membre 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 626 Statut Membre 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 3756 Statut Membre 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 626 Statut Membre 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 3756 Statut Membre 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 626 Statut Membre 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 3756 Statut Membre 475
 
Pas de souci, c'est toujours un plaisir d'aider.
0
audi68 Messages postés 626 Statut Membre 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