Aide securisation d'un code de connexion

geoffreyvp -  
avion-f16 Messages postés 19254 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour a tous,
voila j'ai recemment recu dans ma base de donnees , une injection sql "\'"

je l'ai recu car mon ami s'est inscrit avec celle ci pour voir mes failles.

Mais voila j'essaie de le securiser avec mes mysql_real_escape_string(htmlspecialchars

mais maintenant ma page ne marche plus...

est ce que vous trouvez une erreur dans ce code ci dessous??

<?php
session_start();
$pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo']));
$_SESSION['pseudo'] =  "$pseudo";
?>
<?php
$pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo']));
if($pseudo == "");
{
echo 'bien essayé mais ca marchera pas';
}
else
{
--> la connexion <--
$sql = "SELECT password FROM membres WHERE pseudo='".$pseudo."'";
$req = mysql_query($sql) or die('Erreur SQL !');
$data = mysql_fetch_assoc($req);
if($data['mot_passe'] == $pass)
{
echo 'connexion reussie';
header ('location: zonemembre.php');
}
else
{
echo 'votre mot de passe est incorrect ou bien inconnu';
} 

}
?>


j'ai recopié 2 fois la ligne avec $ pseudo au debut mais je crois que une suffit amplement non??



A voir également:

7 réponses

geoffreyvp
 
personne n'aurait une idée??
0
avion-f16 Messages postés 19254 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
Salut.

- Ligne 4 : Inutile
- Lignes 5 et 6 : Elles ne servent à rien
- Ligne 7 : copie de la ligne 3 : $pseudo est déjà protégée
- Ligne 8 : Il ne faut pas de point-virgule dans les structures conditionnelles
- Ligne 14 : On utilise deux slashes pour mettre une ligne en commentaire

Dans ta requêtes SQL : 'SELECT password [...]'
Dans la condition : $data['mot_passe']
Toujours dans la condition, d'où vient $pass ?

Pour finir, tu ne peux pas utiliser header() après l'envoie du texte au navigateur (cf. ligne précédente).
0
geoffreyvp
 
je sais pas du tout mais mon $ pass marche parfaitement...
0
avion-f16 Messages postés 19254 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
L'option register_globals est sans doute activée sur ton serveur.
Je te conseille quand même de déclarer la variable comme tu l'as fais avec $pseudo, cette option n'est pas activée sur tous les serveurs.
D'ailleur, je te conseille aussi d'éviter cette option pour des raisons de sécurité.
0
geoffreyvp
 
donc je fais un $pass = ... comme le $pseudo c'est ca??
0
avion-f16 Messages postés 19254 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
oui, et n'oublie pas de remplacer $_POST['pseudo'] par $_POST['pass']
0
geoffreyvp
 
bizarrement j'ai toujours le meme probleme
0
geoffreyvp
 
<?php
session_start();
$pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo']));
if($pseudo == "")
{
echo 'bien essayé mais ca marchera pas';
}
else
{
mysql_connect('sql200.hebergratuit.com','rober_6835970','florian');
mysql_select_db('rober_6835970_codcmoh');
$sql = "SELECT password FROM membres WHERE pseudo='".$pseudo."'";
$req = mysql_query($sql) or die('Erreur SQL !');
$data = mysql_fetch_assoc($req);
if($data['mot_passe'] == $_POST['password'])
{
header ('location: zonemembre.php');
}
else
{
echo 'votre mot de passe est incorrect ou bien inconnu';
} 

}
?>


voila un code corrigé mais ca ne marche toujours pas . (ca me met toujours mon "bien essayé mais ca marchera pas"

y aurait il un probleme avec ma condition ??
0

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

Posez votre question
geoffreyvp
 
Voici l'evolution de mon code :

<?php
session_start();
$pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo']));
$password = md5(mysql_real_escape_string(htmlspecialchars($_POST['password'])));
?>
<?php
if(empty($pseudo))
{
echo 'bien essayé mais ca marchera pas';
}
else
{
//la connexion invisible bien sur
$sql = "SELECT password FROM membres WHERE pseudo='".$pseudo."'";
$req = mysql_query($sql) or die('Erreur SQL !');
$data = mysql_fetch_assoc($req);
if($data['password'] == $password)
{
echo 'Vous etes connecté';
header ('location: zonemembre.php');
}
else
{
echo 'votre mot de passe est incorrect ou bien inconnu';
} 

}
?>
0
avion-f16 Messages postés 19254 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
Salut.

- Pour utiliser mysql_real_escape_string(), une connexion à MySQL doit être active.

- Avant d'utiliser les variables $_POST, il faut vérifier si elles existent.

- Pour le pseudo, il faut également supprimer les espaces en début et fin avec trim()

- Il faut aussi vérifier si le membre existe sinon mysql_fetch_assoc() retournera false, donc $data['password'] n'existera pas, et tu auras une erreur "index is not defined"

- Pour des raisons de sécurité, j'ai pour habitude de n'afficher qu'un seul message en cas d'erreur, sans préciser si ce qui pose problème est le mot de passe ou si le membre n'existe pas.

Essaye avec ça :
https://gist.github.com/406ec42f9994c93cd2f0
(je ne l'ai pas testé avant, il peut y avoir des erreurs)
0
Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   846
 
Hello,

Tu peux aussi utiliser des requêtes préparées avec la méthode bindParam qui te permet de définir le type de paramètre de ta requête (entier, string...) et d'éviter ainsi que les utilisateurs rentrent n'importe quoi !
0
avion-f16 Messages postés 19254 Date d'inscription   Statut Contributeur Dernière intervention   4 507
 
Les requêtes préparées, à la base, ne sont pas conçues dans le but de sécuriser mais plutôt pour optimiser les performances.
0