Rechercher : dans
Par :

[mysql][faille securite]

Dernière réponse le 13 mai 2009 à 11:00:26 missb, le 30 jun 2006 à 11:14:33 
 Signaler ce message aux modérateurs

Bonjour
et merci d'avance

j'ai fait plusieurs scripts avec easy php et mysql pour un questionnaire.
au moment de le mettre sur le serveur, mon webmaster me dit

"Les règles primaires de sécurité ne sont clairement pas respectées (il y a de l'injection SQL possible). Ça mettra surtout en péril ta propre base de données."

mais il ne m'aide pas pour autant ...
est ce que quelqu'un pourrait me dire ce qui coince la dedans car c'est le premier script que je fais !!

je suppose, peut être à tort, que c'est dans cette partie-là


//création d'une connexion à la base de données
mysql_connect("localhost","root","");

		// sélection de la base de données news
mysql_select_db("doctorants");


	
		// création de la requête  qui va nous permettre de maj
$requete = "UPDATE suivi SET datedebcontrat='$datedebutcontrat',datefincontrat='$datefincontrat',sujet='$sujet' where identite = '$identite' ";
 
mysql_query($requete) or die("pb sql");


A moins que ce ne soit là

<?php
 
session_start();
?>
<HTML>
<HEAD><TITLE>Base de données des doctorants </TITLE>

</HEAD>
<H3 ALIGN=CENTER>

FIN D’ACTIVITE DES DOCTORANTS  <BR>
Questionnaire 2006<BR>

-

PROMOTION 2005</H3>


<?php


 


// récupération du nom saisi dans le formulaire , on le met en maj comme dans la base
$nom=$_REQUEST["nom"];

$prenom=$_REQUEST["prenom"];
$nom=strtoupper($nom);
// récupération du prenom saisi dans le formulaire,on le met en minuscule, on met la 1ere lettre en maj comme dans la base

$prenom=strtolower($prenom);
$prenom=ucfirst($prenom);

// si les champs sont vides on refuse

if ($nom==""&&$prenom=="")
	{
	echo "<TR><TD COLSPAN=5>Vous devez saisir votre nom et prénom : acces refusé</TD></TR>";

	}
else 
	{



// création d'une connexion à la base de données


mysql_connect("localhost","root","");

// sélection de la base de données formation
mysql_select_db("doctorants");




// création de la requête  qui va nous permettre de récupérer les infos sur le doctorant
$requete = "SELECT * FROM suivi where identite = '$nom $prenom' ";

// fait le lien entre identite et identifiant


// execution de la requête
$resultats = mysql_query($requete)or die (" probleme sql");

// parcours des résulats : tant qu'il y a des resultats : afficher
while($ligne = mysql_fetch_array($resultats)) {
	
              


// récupération des champs	

$identite= $ligne["identite"];	
$pays = $ligne["pays"];	
$genre = $ligne["genre"];	
$annee = $ligne["annee"];	
$equipe = $ligne["equipe"];			
	 


// affichage du tableau

// si le nom saisi dans le formulaire est le même que celui récupéré de la base de données afficher liste

	// affichage d'une ligne du tableau
		 


			// affichage du nom
			echo "Nom et prénom du doctorant: $identite<br>";
			
			// affichage du pays
			echo "Pays : $pays<br>";
			
			// affichage du sexe
			echo "Sexe : $genre<br>";
			
			// affichage annee naissance
			echo "Année de naissance : $annee<br>";
			// affichage de l'equipe
			echo "Equipe/projet de recherche : $equipe<br>";
		
	
						



$_SESSION["identite"]=$identite;
$_SESSION["pays"]=$pays;
$_SESSION["genre"]=$genre;
$_SESSION["annee"]=$annee;
$_SESSION["equipe"]=$equipe;
include 'questionnaire.php';
}
// si le login saisi dans le formulaire  n'est pas dans la base

if (mysql_num_rows($resultats)==0)

{
echo "<TR><TD COLSPAN=5>Erreur de login : acces refusé</TD></TR>";

}
}
?>
</table>

</HTML>

Meilleures réponses pour « [mysql][faille securite] » dans :
Attaques de serveurs web Voir Vulnérabilité des services web Les premières attaques réseau exploitaient des vulnérabilités liées à l'implémentation des protocoles de la suite TCP/IP. Avec la correction progressive de ces vulnérabilités les attaques se sont décalées vers les...
[WiFi] Réseau sans fil et sécurité VoirDéfinition Infrastructure réseau Sécurité Définition Le Wifi est une technologie permettant de créer des réseaux informatiques sans fil (Wireless). Il s'agit d'une norme de l'IEEE baptisée 802.11. Sa portée varie d'un appareil à...
Télécharger Microsoft Security Essentials (XP) VoirMicrosoft Security Essentials est un Antivirus proposé pas Microsoft pour répondre à un besoin de protection contre les Virus, logiciels espions et autres logiciels malveillants. Microsoft Security Essentials est simple d'installation et facile...
Installation d'un serveur Web sous Linux (Apache, PHP et MySQL) VoirIntroduction Un serveur web est un logiciel permettant de rendre accessibles à de nombreux ordinateurs (les clients) des pages web stockées sur le disque. Cette fiche pratique explique comment installer le serveur web Apache sur un système de type...
Importer et exporter des données sous MySQL VoirImportation et exportation Les Système de Gestion de Bases de Données tels que MySQL permettent de manipuler facilement et avec beaucoup de souplesse un très important volume de données. Toutefois, aussi robuste soit MySQL, il peut être intéressant...
MySQL - Installation sous Windows VoirPrésentation de MySQL MySQL est un Système de Gestion de Bases de Données (SGBD) fonctionnant sous Linux et Windows. Depuis la version 3.23.19, MySQL est sous Licence GPL (aussi bien sous Linux que Windows), ce qui signifie qu'il peut être utilisé...

1

elghafoud, le 30 jun 2006 à 13:19:24

Tout simplement parce que roor n'a pas de mot de passe !!! et c'est tres tres tres grave! essaye de mettre un !
sinon essaye aussi de creer des utilisateur avec des droit limite!

courage Là où la diplomatie a echoué, il reste la femme.

Répondre à elghafoud

2

missb, le 30 jun 2006 à 14:24:14

Oh, merci
mais le truc c'est que les utilisateurs doivent pouvoir modifier la base, mais juste leur ligne.
alors, même si je leur donne un mot de passe, comment faire pour qu'ils ne touchent pas aux autres lignes ?

Répondre à missb

3

BARBOIN Jean, le 8 jun 2007 à 17:15:36

Lalala tu dis n'importe quoi il faut pas mettre de mot de passe pour que se soit BEAUCOUP MIEUX SECURISE je l'ai fait plein de fois et je peux te dire que je n'ai eu aucun probleme au contraire: on m'avait dis qu'il fallais absolument un mot de passe et du jour au lendemain, mon site a disparu je ne sais comment et après je n'ai pas mis de mot de passe et tout allais mieux, j'avais perdu toutes mes données et j'ai remis 6 mois a tout bien refaire... Donc un conseil: ne met jamais de mot de passe a ton serveur MySQL

Répondre à BARBOIN Jean

4

Edouard, le 8 jun 2007 à 18:12:35

Mets un grand coup de boule à ton webmaster et il t'expliquera tout ça.
Pour ce qui est de root, cela me semble vrai en local host, mais ne compte tu pas mettre en ligne ton site, donc ton hebergeur va te fournir d'autres codes ?

Répondre à Edouard

5

H, le 11 jun 2007 à 17:48:41

Bon j'éclaire les choses :

COncernant : elghafoud, ce n'est pas l'abcense de mot de passes qui va permettre les injections SQL.

Oui, il faut mettre un mot de passe à ton serveur SQL car sinon n'importe qui peux se connecter à ton serveur pour changer le contenu des tables et etc. (A part si tu as une restriction d'IP).

Ensuite, pour ne plus être vulnérable à l'SQL injection, il y a juste à activer les magic_quotes dans ton fichier PHP.ini, de même pour plus de sécurité, (même si cela n'a rien a voir avec l'SQL injection) active le Safe_mod.


Voilà :D

Répondre à H

6

Freko28, le 13 mai 2009 à 10:41:03

Bonjour à Tous

Voici le code corrigé (enfin les principals failles)

<?php

session_start();
?>
<HTML>
<HEAD><TITLE>Base de données des doctorants </TITLE>

</HEAD>
<H3 ALIGN=CENTER>

FIN D’ACTIVITE DES DOCTORANTS <BR>
Questionnaire 2006<BR>

-

PROMOTION 2005</H3>


<?php

//Fonction de securisation des variable pour les utiliser dans une requete utilisation :
//Sur une variable de type str $var = Secure_SQL($var, 2);
//Sur une variable de type int $var = Secure_SQL($var, 1); retourne 0 en cas derreur
function Secure_SQL($var, $id) {
if $id == 1 {
if (is_int(23)) {
return $var;
}
else {
return 0;
}
}
else {
if(get_magic_quotes_gpc()) {
return addslashes($var);
}
}
}

//Fonction de securisation des variable contre les failles xss
function Secure_Xss($var) {
return strip_tags(htmlentities ($var));
}


// récupération du nom saisi dans le formulaire , on le met en maj comme dans la base
$nom=$_REQUEST["nom"];

$prenom=$_REQUEST["prenom"];
$nom=strtoupper($nom);
// récupération du prenom saisi dans le formulaire,on le met en minuscule, on met la 1ere lettre en maj comme dans la base

$prenom=strtolower($prenom);
$prenom=ucfirst($prenom);

// si les champs sont vides on refuse

if ($nom==""&&$prenom=="")
{
echo "<TR><TD COLSPAN=5>Vous devez saisir votre nom et prénom : acces refusé</TD></TR>";

}
else
{



// création d'une connexion à la base de données


mysql_connect("localhost","root","");

// sélection de la base de données formation
mysql_select_db("doctorants");
$nom = Secure_SQL($nom,2)
$prenom = Secure_SQL($prenom,2)



// création de la requête qui va nous permettre de récupérer les infos sur le doctorant
$requete = "SELECT * FROM suivi where identite = '$nom $prenom' ";

// fait le lien entre identite et identifiant


// execution de la requête
$resultats = mysql_query($requete)or die (" probleme sql");

// parcours des résulats : tant qu'il y a des resultats : afficher
while($ligne = mysql_fetch_array($resultats)) {




// récupération des champs

$identite= Secure_Xss($ligne["identite"]);
$pays = Secure_Xss($ligne["pays"]);
$genre = Secure_Xss($ligne["genre"]);
$annee = Secure_Xss($ligne["annee"]);
$equipe = Secure_Xss($ligne["equipe"]);



// affichage du tableau

// si le nom saisi dans le formulaire est le même que celui récupéré de la base de données afficher liste

// affichage d'une ligne du tableau



// affichage du nom
echo "Nom et prénom du doctorant: $identite<br>";

// affichage du pays
echo "Pays : $pays<br>";

// affichage du sexe
echo "Sexe : $genre<br>";

// affichage annee naissance
echo "Année de naissance : $annee<br>";
// affichage de l'equipe
echo "Equipe/projet de recherche : $equipe<br>";






$_SESSION["identite"]=$identite;
$_SESSION["pays"]=$pays;
$_SESSION["genre"]=$genre;
$_SESSION["annee"]=$annee;
$_SESSION["equipe"]=$equipe;
include 'questionnaire.php';
}
// si le login saisi dans le formulaire n'est pas dans la base

if (mysql_num_rows($resultats)==0)

{
echo "<TR><TD COLSPAN=5>Erreur de login : acces refusé</TD></TR>";

}
}
?>
</table>

</HTML>

Répondre à Freko28

7

Freko28, le 13 mai 2009 à 10:46:08

Pour ton update tu peu faire aussi :

//création d'une connexion à la base de données
mysql_connect("localhost","root","");

// sélection de la base de données news
mysql_select_db("doctorants");



// création de la requête qui va nous permettre de maj
$requete = "UPDATE suivi SET datedebcontrat='Secure_SQL($datedebutcontrat,2)',datefincontrat='Secure_SQL($datefincontrat,2)',sujet='Secure_SQL($sujet,2)' where identite = 'Secure_SQL($identite,2)' ";

mysql_query($requete) or die("pb sql");


Donc maintenant, A CHAQUE FOIS QUE TU UTILISE UNE VARIABLE DANS UNE REQUETE, IL FAUT LA VERIFIER/PROTEGER...
Un autre principe de base en secu informatique : Ne jamai faire confiance aux données transmisent par l'utilisateur

Répondre à Freko28

8

Freko28, le 13 mai 2009 à 10:50:29

Bon je n'ai pas trouver de bouton edit donc je rajoute un 3ème post pour signaler une petite erreure dans le premier code :


function Secure_SQL($var, $id) {
if ($id == 1) {
if (is_numeric($var) && $var >=0) {
return $var;
}
else {
return 0;
}
}
else {
if(get_magic_quotes_gpc()) {
return addslashes($var);
}
}
}



Encors désolé pour l'enchainement de post

Répondre à Freko28

9

 Freko28, le 13 mai 2009 à 11:00:26

Bon dernière edition sans erreur cette fois :

Bonjour à Tous

Voici le code corrigé (enfin les principals failles)


<?php

session_start();
?>
<HTML>
<HEAD><TITLE>Base de données des doctorants </TITLE>

</HEAD>
<H3 ALIGN=CENTER>

FIN D’ACTIVITE DES DOCTORANTS <BR>
Questionnaire 2006<BR>

-

PROMOTION 2005</H3>


<?php

//Fonction de securisation des variable pour les utiliser dans une requete utilisation :
//Sur une variable de type str $var = Secure_SQL($var, 2);
//Sur une variable de type int $var = Secure_SQL($var, 1); retourne 0 en cas derreur
function Secure_SQL($var, $id) {
if ($id == 1) {
if (is_numeric($var) && $var >=0) {
return $var;
}
else {
return 0;
}
}
else {
if(!get_magic_quotes_gpc()) {
return addslashes($var);
}
}
}


//Fonction de securisation des variable contre les failles xss
function Secure_Xss($var) {
return strip_tags(htmlentities ($var));
}


// récupération du nom saisi dans le formulaire , on le met en maj comme dans la base
$nom=$_REQUEST["nom"];

$prenom=$_REQUEST["prenom"];
$nom=strtoupper($nom);
// récupération du prenom saisi dans le formulaire,on le met en minuscule, on met la 1ere lettre en maj comme dans la base

$prenom=strtolower($prenom);
$prenom=ucfirst($prenom);

// si les champs sont vides on refuse

if ($nom==""&&$prenom=="")
{
echo "<TR><TD COLSPAN=5>Vous devez saisir votre nom et prénom : acces refusé</TD></TR>";

}
else
{



// création d'une connexion à la base de données


mysql_connect("localhost","root","");

// sélection de la base de données formation
mysql_select_db("doctorants");
$nom = Secure_SQL($nom,2)
$prenom = Secure_SQL($prenom,2)



// création de la requête qui va nous permettre de récupérer les infos sur le doctorant
$requete = "SELECT * FROM suivi where identite = '$nom $prenom' ";

// fait le lien entre identite et identifiant


// execution de la requête
$resultats = mysql_query($requete)or die (" probleme sql");

// parcours des résulats : tant qu'il y a des resultats : afficher
while($ligne = mysql_fetch_array($resultats)) {




// récupération des champs

$identite= Secure_Xss($ligne["identite"]);
$pays = Secure_Xss($ligne["pays"]);
$genre = Secure_Xss($ligne["genre"]);
$annee = Secure_Xss($ligne["annee"]);
$equipe = Secure_Xss($ligne["equipe"]);



// affichage du tableau

// si le nom saisi dans le formulaire est le même que celui récupéré de la base de données afficher liste

// affichage d'une ligne du tableau



// affichage du nom
echo "Nom et prénom du doctorant: $identite<br>";

// affichage du pays
echo "Pays : $pays<br>";

// affichage du sexe
echo "Sexe : $genre<br>";

// affichage annee naissance
echo "Année de naissance : $annee<br>";
// affichage de l'equipe
echo "Equipe/projet de recherche : $equipe<br>";






$_SESSION["identite"]=$identite;
$_SESSION["pays"]=$pays;
$_SESSION["genre"]=$genre;
$_SESSION["annee"]=$annee;
$_SESSION["equipe"]=$equipe;
include 'questionnaire.php';
}
// si le login saisi dans le formulaire n'est pas dans la base

if (mysql_num_rows($resultats)==0)

{
echo "<TR><TD COLSPAN=5>Erreur de login : acces refusé</TD></TR>";

}
}
?>
</table>

</HTML>




------------------------------


Pour ton update tu peu faire :


------------------------------------


//création d'une connexion à la base de données
mysql_connect("localhost","root","");

// sélection de la base de données news
mysql_select_db("doctorants");



// création de la requête qui va nous permettre de maj
$requete = "UPDATE suivi SET datedebcontrat='Secure_SQL($datedebutcontrat,2)',datefincontrat='Secure_SQL($datefincontrat,2)',sujet='Secure_SQL($sujet,2)' where identite = 'Secure_SQL($identite,2)' ";

mysql_query($requete) or die("pb sql");


Donc maintenant, A CHAQUE FOIS QUE TU UTILISE UNE VARIABLE DANS UNE REQUETE, IL FAUT LA VERIFIER/PROTEGER...
Un autre principe de base en secu informatique : Ne jamai faire confiance aux données transmisent par l'utilisateur



Encors désolé pour l'enchainement de post si un modo pouvais virer mes précedent post ça serai sympa :)

Répondre à Freko28
Collection CommentÇaMarche.net