Mdp PHP

cs_bibidu69 Messages postés 7 Date d'inscription dimanche 19 juillet 2009 Statut Membre Dernière intervention 24 décembre 2010 - 21 déc. 2010 à 23:23
cs_bibidu69 Messages postés 7 Date d'inscription dimanche 19 juillet 2009 Statut Membre Dernière intervention 24 décembre 2010 - 24 déc. 2010 à 17:12
Bonjour, j'ai un problème de mot de passe dans mon code PHP le voici :
<script type="text/javascript"><?php
// on teste si le visiteur a soumis le formulaire de connexion
if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') {
        if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass']))) {

                $base = mysql_connect ('localhost', 'user', 'mdp');
                mysql_select_db ('membre', $base);

                // on teste si une entrée de la base contient ce couple login / pass
                $sql = 'SELECT count(*) FROM membre WHERE login="'.mysql_escape_string($_POST['login']).'" AND pass_md5="'.mysql_escape_string(md5($_POST['pass'])).'"';
                $req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());
                $data = mysql_fetch_array($req);

                mysql_free_result($req);
                mysql_close();

                // si on obtient une réponse, alors l'utilisateur est un membre
                if ($data[0] == 1) {
                        session_start();
                        $_SESSION['login'] = $_POST['login'];
                        header('Location: membre.html');
                        exit();
                }
                // si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son login, soit dans son mot de passe
                elseif ($data[0] == 0) {
                        $erreur = 'Compte non reconnu.';
                }
                // sinon, alors la, il y a un gros problème 
                else {
                        $erreur = 'Probème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.';
                }
        }
        else {
                $erreur = 'Au moins un des champs est vide.';
        }
}
?>
</script>


je voudrait sécuriser mes info :
 $base = mysql_connect ('localhost', 'user', 'mdp');
pour que mes visiteur un peu curieux ne puiss pas voir mon mdp ...
merci de m'aider

13 réponses

cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
22 déc. 2010 à 00:04
bonsoir

//avant

$sql = 'SELECT count(*) FROM membre
WHERE login="'.mysql_escape_string($_POST['login']).'"
AND pass_md5="'.mysql_escape_string(md5($_POST['pass'])).'"'
;

//aprés
//fait des variables intermediares ça evitera d'injecter direct dans la requete
//injection sql
//strip_tags pour le xss

$login=mysql_real_escape_string(strip_tags($_POST['login']));
$pass=mysql_real_escape_string(strip_tags($_POST['pass']));
$pass=md5($pass);

$sql = 'SELECT count(*) FROM membre
WHERE login="'.$login.'"
AND pass_md5="'.$pass.'"'
limit 1; /* le premier trouvé est c'est tout */
0
cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
22 déc. 2010 à 00:07
mais des exit; ou die();
voir header('Location:http://????');exit; si le test est négatif
n'affiche pas les erreurs ...
0
phpAnonyme Messages postés 392 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 23 mars 2012 55
22 déc. 2010 à 01:42
Je comprends pas :
[quote=Cod57]fait des variables intermediares ça evitera d'injecter direct dans la requete/quote

En quoi :
$login=mysql_real_escape_string($_POST['login']);
SELECT count(*) FROM membre WHERE login='".$login."'
est différent de :
SELECT count(*) FROM membre WHERE login='".mysql_real_escape_string($_POST['login')."'

??




______________________________________________________________________
0
Lyle56 Messages postés 240 Date d'inscription jeudi 1 mai 2008 Statut Membre Dernière intervention 19 juillet 2012 2
22 déc. 2010 à 09:48
Bonjour;

Premier cas : tu range $_POST['login'] dans une variable $login "nettoyée" que tu peut réutilisé tel que dans tes requêtes.
Deuxième cas : Tu devras utilisé le code à chaque fois que tu voudras passer ta variable $_POST['login'] dans une requête.

Ensuite pour "sécurisé" tes mots de passe etc

Créer un fichier config.php qui contient ceci
DEFINE('SRV_NAME','localhost');
DEFINE('SRV_USER','user');
DEFINE('SRV_PASS','mdp');
DEFINE('BSE_WORK','membre');

en début de fichier tu ajoute require_once('config.php');
Tu remplace alors

$base = mysql_connect ('localhost', 'user', 'mdp');
mysql_select_db ('membre', $base);

par

$base = mysql_connect (SRV_NAME, SRV_USER,SRV_PASS);
mysql_select_db (BSE_WORK, $base);


Avantage, si tu change ton mot de passe de base de données; tu n'auras à le modifié que dans config.php; cela sera pris en compte ensuite dans tout les scripts qui utilise la connexion.

Sans maitrise, la puissance n'est rien
Il ne faut pas vendre la peau de l'ours, non il ne faut pas.
0

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

Posez votre question
cs_bibidu69 Messages postés 7 Date d'inscription dimanche 19 juillet 2009 Statut Membre Dernière intervention 24 décembre 2010
22 déc. 2010 à 17:40
Premier cas : tu range $_POST['login'] dans une variable $login "nettoyée" que tu peut réutilisé tel que dans tes requêtes. 
Deuxième cas : Tu devras utilisé le code à chaque fois que tu voudras passer ta variable $_POST['login'] dans une requête. 


c'est a dire que je doit faire comment ?
0
Lyle56 Messages postés 240 Date d'inscription jeudi 1 mai 2008 Statut Membre Dernière intervention 19 juillet 2012 2
23 déc. 2010 à 15:59
Bonjour,

Tout dépend de la longueur de ton code ... et du nombre de requête ...

L'idéal reste encore de faire,

$login=mysql_real_escape_string($_POST['login']);
SELECT count(*) FROM membre WHERE login='".$login."' 


Pour prendre de bonne habitude.

Sans maitrise, la puissance n'est rien
Il ne faut pas vendre la peau de l'ours, non il ne faut pas.
0
cs_bibidu69 Messages postés 7 Date d'inscription dimanche 19 juillet 2009 Statut Membre Dernière intervention 24 décembre 2010
23 déc. 2010 à 21:23
D'accord merci de votre aide.
0
cs_bibidu69 Messages postés 7 Date d'inscription dimanche 19 juillet 2009 Statut Membre Dernière intervention 24 décembre 2010
23 déc. 2010 à 21:25
j'ai aussi un autre problème avec le script :
<?php
// on teste si le visiteur a soumis le formulaire de connexion
if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') { 
   if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass']))) { 
 
      $base = mysql_connect ('localhost', 'name', 'mdp'); 
      mysql_select_db ('membre', $base); 
 
      // on teste si une entrée de la base contient ce couple login / pass
      $sql = 'SELECT count(*) FROM membre WHERE login="'.mysql_escape_string($_POST['login']).'" AND pass_md5="'.mysql_escape_string(md5($_POST['pass'])).'"'; 
      $req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error()); 
      $data = mysql_fetch_array($req); 
 
      mysql_free_result($req); 
      mysql_close(); 
 
      // si on obtient une réponse, alors l'utilisateur est un membre
      if ($data[0] == 1) { 
         session_start(); 
         $_SESSION['login'] = $_POST['login']; 
         header('Location: membre.php'); 
         exit(); 
      } 
      // si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son login, soit dans son mot de passe
      elseif ($data[0] == 0) { 
         $erreur = 'Compte non reconnu.'; 
      } 
      // sinon, alors la, il y a un gros problème :)
      else { 
         $erreur = 'Probème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.'; 
      } 
   } 
   else { 
      $erreur = 'Au moins un des champs est vide.'; 
   }  
}  
?>


sur ma page quand je m'identifie (j'ai fait mon compte admin) et bien sa me marque sa :

Warning: session_start() [function.session-start]: open(/mnt/169/sdd/f/2/thenavy/sessions/sess_0819b82c099ad34c2b0b1977ae68ebb3, O_RDWR) failed: No such file or directory (2) in /mnt/169/sdd/f/2/thenavy/index.php on line 19

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /mnt/169/sdd/f/2/thenavy/index.php:19) in /mnt/169/sdd/f/2/thenavy/index.php on line 19

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /mnt/169/sdd/f/2/thenavy/index.php:19) in /mnt/169/sdd/f/2/thenavy/index.php on line 19

Warning: Cannot modify header information - headers already sent by (output started at /mnt/169/sdd/f/2/thenavy/index.php:19) in /mnt/169/sdd/f/2/thenavy/index.php on line 21

Warning: Unknown(): open(/mnt/169/sdd/f/2/thenavy/sessions/sess_0819b82c099ad34c2b0b1977ae68ebb3, O_RDWR) failed: No such file or directory (2) in Unknown on line 0

Warning: Unknown(): Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/mnt/169/sdd/f/2/thenavy/sessions) in Unknown on line 0

Merci de m'aider
0
Lyle56 Messages postés 240 Date d'inscription jeudi 1 mai 2008 Statut Membre Dernière intervention 19 juillet 2012 2
24 déc. 2010 à 09:36
Bonjour,

La fonction session_start() doit être au tout début de ton script.
comme ceci :

<?php
session_start();
// on teste si le visiteur a soumis le formulaire de connexion
if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') { 




Sans maitrise, la puissance n'est rien
Il ne faut pas vendre la peau de l'ours, non il ne faut pas.
0
cs_bibidu69 Messages postés 7 Date d'inscription dimanche 19 juillet 2009 Statut Membre Dernière intervention 24 décembre 2010
24 déc. 2010 à 11:32
Bonjour, alors j'ai fait ce que vous m'avez dit mais sur ma page membre.php j'ai ce code :
<?php 
session_start();
if (!isset($_SESSION['login'])) {
header ('Location: membre.php');
exit();
}
?>


et sa me met aussi un probleme de
session_start();
0
cs_bibidu69 Messages postés 7 Date d'inscription dimanche 19 juillet 2009 Statut Membre Dernière intervention 24 décembre 2010
24 déc. 2010 à 11:40
parce que enfaite quand j'enleve les session_start() de mes page index.php et inscription.php sa me redirige bien vers ma page membre.php, mais c'est cette derniere qui a un probleme de session_start() ...
0
phpAnonyme Messages postés 392 Date d'inscription mercredi 28 octobre 2009 Statut Membre Dernière intervention 23 mars 2012 55
24 déc. 2010 à 15:06
Ce problème a déjà été traité sur le forum, à multe reprise. Une petite recherche te fera pas de mal.
Notamment dans la DOC PHP : php.net

Ton problème n'est rien de bien méchant, c'est juste qu'il y a une façon d'utiliser les entêtes.
Par ailleurs il existe une manière de contourner ce genre de souci avec les fonctions de bufferisation de sortie.



______________________________________________________________________
0
cs_bibidu69 Messages postés 7 Date d'inscription dimanche 19 juillet 2009 Statut Membre Dernière intervention 24 décembre 2010
24 déc. 2010 à 17:12
D'accord merci, j'ai trouvé la solution, il manquait un dossier " sessions ", depuis sa fonctionne super bien, merci a vous.
0
Rejoignez-nous