IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Sécurité] Session PHP


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2002
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 72
    Points : 48
    Points
    48
    Par défaut [Sécurité] Session PHP
    Bonjour,
    voila je dois faire une page de login qui renvoi a une autre page qui vas tester si l'utilisateur existe dans une base mysql ( en cryptant le pass pour plus de sécurité ) puis creer une session et le renvoyer sur une autre page.
    Pour cela j'ai trouvé un bon tuto que j'ai apprécié sur le forum :
    http://bob.developpez.com/phpauth/

    et voila le code que j'ai fais :

    Login.php :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    <html> 
    <head> 
    <title>Login Page</title> 
    <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1' /> 
    <script language="javascript" type="text/javascript" src="login.js"></script> 
    </head> 
    <body> 
     
    <script type="text/javascript">
    function submit_pass()
    {
      pass=document.forms['log'].passwd.value;
      document.forms['log'].passwd.value="";
      buf=MD5(pass);
      document.forms['log'].md5.value=buf;
     
      return true;
    } 
    </script>
     
    <form id='log' method='post' action='auth.php' onsubmit='javascript:submit_pass();'> 
    <input type='hidden' name='md5' /> 
    <table align='center'> 
    <tr><td>Login</td><td><input name='login' /></td></tr> 
    <tr><td>Mot de passe</td><td><input type='password' name='passwd' /></td></tr> 
    <tr><td colspan='2' align='center'><input type='submit' value='Login !' /></td>
    </tr> 
    </table> 
    </form> 
    <?php
    echo md5("azerty");
    ?>
    </body>

    auth.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    <?php
    function CheckUser($login,$md5) 
    { 
          $serveurBD = "localhost"; 
          $userBD    = ""; // mets ton utilisateur de la base 
          $passBD    = ""; // mets son mot de passe 
          $base      = "filas" ; 
          $monlogin  = $login; 
          $monpass   = $md5; 
          // connexion base 
          $connexion = @mysql_connect($serveurBD, $userBD, $passBD) or die ("Erreur de connexion MySQL !"); 
          mysql_select_db($base) or die ( sql_error() ); 
          // requete 
          $requete = "SELECT pass FROM utilisateur WHERE login LIKE '$monlogin'"; 
          $resultat = mysql_query($requete) or die( sql_error() ); 
     //     if( mysql_num_rows($resultat) != 1 ) return false; 
          $passbase = mysql_fetch_row($resultat); 
    	  mysql_free_result($resultat);      
          mysql_close($connexion); 
      if($md5==$passbase) // MD5 de azerty 
        { echo 'dans true '; 
    	return true; 
    	}
    	echo 'dans false ';  
        return false; 
    }
    ?>
    <?php
    if(!isset($_POST['md5'])) 
    { 
    //  header("Location: login.php"); 
      //die();
      echo 'dans test de md5'; 
    } 
    $md5=$_POST['md5']; 
    if(!isset($_POST['login'])) 
    { 
     // header("Location: login.php"); 
      // die();
      echo 'dans test de login'; 
    } 
    $login=$_POST['login']; 
    if(!CheckUser($login,$md5)) 
    { 
      //header("Location: login.php"); 
      //die();
      echo 'dans checkuser'; 
    }
    session_start(); 
     
    $_SESSION['last_access']=time(); 
    $_SESSION['ipaddr']=$_SERVER['REMOTE_ADDR']; 
    $_SESSION['user']=$login; 
     
    header("Location: page.php");
    ?>

    Et voila l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    dans true 
    Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at c:\wamp\www\auth.php:21) in c:\wamp\www\auth.php on line 49
     
    Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at c:\wamp\www\auth.php:21) in c:\wamp\www\auth.php on line 49
     
    Warning: Cannot modify header information - headers already sent by (output started at c:\wamp\www\auth.php:21) in c:\wamp\www\auth.php on line 55

  2. #2
    Membre régulier
    Inscrit en
    Septembre 2005
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 114
    Points : 103
    Points
    103
    Par défaut
    Hello,

    comme l'erreur le dit, tu ne peux pas avoir de sortie html avant d'envoyer un header quelconque : header (), session_srat() etc...

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2002
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 72
    Points : 48
    Points
    48
    Par défaut
    euhhh wi j'ai tout compris lol

  4. #4
    Membre régulier
    Inscrit en
    Septembre 2005
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 114
    Points : 103
    Points
    103
    Par défaut
    en gros :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <br/>
    <?php
    session_start ();
    ?>
    ça marche po.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?php
    session_start ();
    ?>
    <br/>
    ça marche.

    ;-)

    Bref...tu ne dois pas avoir de html (ça inclut un bête espace ou un saut de ligne dans ton fichier php hein) AVANT de faire un envoi d'en-tête.

    Pour pallier à ça : soit tu bouscules ton code..soit tu ajoutes un ob_start () en début de fichier, et un ob_end_flush () à la fin.
    Tu peux aller voir ces fonctions sur php.net

  5. #5
    Membre du Club
    Inscrit en
    Décembre 2002
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 72
    Points : 48
    Points
    48
    Par défaut
    voila je comprend mieux merci mais je ne vois toujours pas ou est ce que j'ai d'html dans mon fichier auth.php ?

  6. #6
    Membre régulier
    Inscrit en
    Septembre 2005
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 114
    Points : 103
    Points
    103
    Par défaut
    Ben là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if($md5==$passbase) // MD5 de azerty
        { echo 'dans true ';
       return true;
       }
       echo 'dans false '; 
        return false;

  7. #7
    Membre du Club
    Inscrit en
    Décembre 2002
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 72
    Points : 48
    Points
    48
    Par défaut
    salut, je touche a php depuis a peine 4 jours alors, si tu pouvais corriger mon code ca m'aidera beaucoup parce ce que meme dans :

    if($md5==$passbase) // MD5 de azerty
    { echo 'dans true ';
    return true;
    }
    echo 'dans false ';
    return false;
    je ne vois pas d'html dedans...

  8. #8
    Membre régulier
    Inscrit en
    Septembre 2005
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 114
    Points : 103
    Points
    103
    Par défaut
    echo 'dans true';
    tu crois que ça t'affiche quoi...?
    Du texte, certes...mais du texte sur la sortie html. Le html c'est quoi ? Du texte, et des balises.

    Bref, quand tu affiches QUOI QUE CE SOIT, tu ne peux pas balancer de header derrière.
    C'est valable si tu fais ça dans ton fichier php.

    Début du fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?php
        //ici un saut de ligne bête et méchant, t'aspas fait exprès, mais il est là
    session_start ()); // Ici, tu as ton erreur. Il râle à cause du saut de ligne juste au-dessus.
    ?>

  9. #9
    Membre du Club
    Inscrit en
    Décembre 2002
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 72
    Points : 48
    Points
    48
    Par défaut
    je comprend mieux merci encore j'ai résolu mon probleme.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. ZoneAlarm bloque mes variables de session PHP en local
    Par GritNatz dans le forum Sécurité
    Réponses: 3
    Dernier message: 24/06/2006, 14h20
  2. Deboggeur de variables de sessions PHP
    Par joe_le_mort dans le forum Langage
    Réponses: 10
    Dernier message: 14/11/2005, 23h22
  3. [Sécurité] Sessions PHP d'une fenetre à une autre
    Par creascript.com dans le forum Langage
    Réponses: 4
    Dernier message: 29/10/2005, 10h10
  4. les sessions PHP
    Par smh_master dans le forum Langage
    Réponses: 4
    Dernier message: 31/08/2005, 14h13
  5. Réponses: 2
    Dernier message: 05/10/2004, 22h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo