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 :

Faille de redirection


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 39
    Points : 10
    Points
    10
    Par défaut Faille de redirection
    Bonjour, j'ai une question concernant la faille de redirection, donc j'ai une page qui permet aux utilisateurs de récuperer leur mot de passe monsite/password
    Une fois le formulaire envoyé correctement ca les rediriges vers monsite/password/send pour leur indiquer que leur mot de passe viens de leur etre envoyé....

    Le truc c'est que si je tape monsite/password/send dans l'url ca m'affiche la page "votre mot de passe vient de vous etre envoyé...." donc je voulais savoir si ca avez une incidence que la sécurité du site ?

    Merci pour votre aide

  2. #2
    Membre actif
    Homme Profil pro
    DSI interne
    Inscrit en
    Juin 2011
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DSI interne
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2011
    Messages : 197
    Points : 290
    Points
    290
    Par défaut
    Il faut que tu protège cette page. Une fois tes variables de ton formulaire envoyé à ta page de traitement en GET/POST tu dois t'assurer qu'elles existent.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if(isset($_POST['ta_var']) && $_POST['ta_var'] != ''){
    //Ton traitement
    }else{
    //Vous n'avez rien à faire là
    }
    En espérant t'avoir aidé.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 39
    Points : 10
    Points
    10
    Par défaut
    J'ai essayé mais je pense avoir mit une mauvaise variable.
    Voila ma page de traitement de l'envoi du mdp
    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
    <?php
    require_once 'include/connect.php'; 
     
    if(!empty($_POST)){
    	$email = $_POST['email'];
    	$envoi=isset($_REQUEST['envoi']) ? $_REQUEST['envoi'] : null;
    	$token_password = sha1(uniqid(rand()));
     
    	$_POST['email']=strip_tags($_POST['email']);
    	print_r($_POST);
    if($envoi=='ok'){
    $ok=0;
     
    extract($_POST);
     
    else{	
    if($ok==0){
    //Si l'internaute à rempli les champs correctement ont envoi le token à la base de donnéen et le mail 
    	$req="UPDATE users SET token_password='$token_password' where email='$email' ";
    	$res=mysql_query($req,$cnx);
     
    	$to = $email;
    	$sujet = 'Confirmation de réinisialisation de votre mot de passe';
    	$body = '
    		<div id="conteneur_mail">	
    		</div>
    		';
    	$header = "From: <$email> \n";
    	$header .= "Reply-To: $email";
    	$header = "MIME-Version: 1.0\r\n";
    	$header .="Content-type: text/html; charset=UTF-8\r\n";
    	'Reply-To: ' . "\r\n" . 
    	'X-Mailer: PHP/' .phpversion();		
     
    		if(@mail($to,$sujet,$body,$header)){
    			$valid1 = "Votre mot de passe vient de vous etre envoyé";
    			unset($email);
    			header("location:/password/send"); 
    			}
    			else{
    				$error ="une erreur est survenue";
    			}
    }
    }
    }
    }
    ?>
    Et la page ou doit etre rediriger l'utilisateur si il a bien entré son mail
    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
    <?php 
    if(isset($_POST['envoi']) && $_POST['envoi'] != ''){
    ?>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html>
    <head>
    	<link rel='StyleSheet' href="/CSS/style.css" type="text/css">
    </head>
     
    <body>
    <div id="background_conteneur">
    	<div id="conteneur">
    		<div id="conteneur_principal">
    			<e>Une confirmation viens de vous etre envoyé par mail, veuillez cliquer sur le lien afin de recevoir votre nouveau mot de passe</e>
    			</br></br>
    	</div>
     
    </div>
    </div>
    </body>
    </html>
    <?php
    }else{
    	header("location:/Service/tutoservices"); 
    }
    ?>
    Si tu pouvais me filer un petit coup de main

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 39
    Points : 10
    Points
    10
    Par défaut
    un peu d'aide

  5. #5
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    Voici une piste (j'ai pas compris ta cuisine avec $envoi et $ok) :
    Une autre chose : TU NE DOIS JAMAIS FAIRE DIRECTEMENT extract SUR UN TABLEAU GLOBAL ($_POST, $_GET, $_REQUEST, $_FILE)
    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
    <?php
     
    require_once 'include/connect.php';
     
    $email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
    $envoi = filter_input(INPUT_POST, 'envoi');
     
    if ($envoi !== 'ok') {
        // redirection vers la sortie
        header('location:......');
        exit;
    }
     
    if ($email) {
        // vérification de l'existence de l'email dans la base de données
        $sql = "SELECT COUNT(id) FROM users WHERE email = '$email'";
        $qry = mysql_query($sql);
        $nb  = mysql_result($qry, 0, 0);
        if ($nb == 0) {
            // pas d'email trouvé : redirection vers la sortie
            header('location:......');
            exit;
        }
    }
     
    // TOUT EST OK -> MISE À JOUR DU MOT DE PASSE
    $sql = "UPDATE users SET token_password = '".sha1(uniqid(rand()))."' where email = '$email'";
    $qry = mysql_query($sql);
     
    /* ... la suite de traitement ... */
     
    ?>

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 39
    Points : 10
    Points
    10
    Par défaut
    merci pour ton aide mais si la personne tape monsite/password/send il pourra voir la page de redirection

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if ($envoi !== 'ok') {
        // redirection vers la sortie
        header('location:......');
        exit;
    }
    relativement, tu test l'url de la page, enfin quand tu tombe sur la page en question, de toute manière tu la redirige vers une autre ( qu'il y est ou non une $_POST), et tu peu dire, aussi, que la requete ne contient pas de $_POST, donc que cette page doit afficher , "Attention";


    etc ...
    il y a moulte solutions, à toi de choisir la plus elegante

  8. #8
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Pour limiter les vues sur la page t'informant de l'envoi du mail, un petit contrôle supplémentaire et le tour est joué (je suppose que tu lances une session pour ce genre de manip) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // TOUT EST OK -> MISE À JOUR DU MOT DE PASSE
    $sql = "UPDATE users SET token_password = '".sha1(uniqid(rand()))."' where email = '$email'";
    $qry = mysql_query($sql);
     
    // laissera passer l'affichage de la page d'information
    $_SESSION['pwd_updated'] = true
    Ensuite sur ta page d'information :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    session_start();
     
    if ( ! isset($_SESSION['pwd_update'])) {
        // sortie
        header('location:...');
        exit;
    }
     
    // désactive l'affichage une seconde fois
    unset($_SESSION['pwd_updated']);
     
    /* code de la page */
    Bref des tas de manières possibles, $_POST, $_GET ou comme ici $_SESSION (je préfère dans la mesure où tu gères le changement de mot de passe)

    EDIT: grillé par ascito

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 39
    Points : 10
    Points
    10
    Par défaut
    Merci ca fonctionne parfaitement, j'ai fait la method $_SESSION.
    Donc avec cette methode je n'ai pas de faille de redirection ?

  10. #10
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par moza2409 Voir le message
    Merci ca fonctionne parfaitement, j'ai fait la method $_SESSION.
    Donc avec cette methode je n'ai pas de faille de redirection ?
    Non, vu que quelque soit le client (identifié ou pas), tu vérifies la présence en session d'un paramètre qui restreint l'affichage de la page. Toute personne qui tombera sur ce lien directement sans avoir suivi la procédure de modification du mot de passe, sera redirigié vers la sortie.

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 16/04/2015, 11h22
  2. redirection de trames
    Par Fry dans le forum Développement
    Réponses: 2
    Dernier message: 06/01/2004, 13h31
  3. [VB.NET]Double redirection.
    Par CammCamm dans le forum ASP.NET
    Réponses: 9
    Dernier message: 24/11/2003, 15h11
  4. [VB6] probleme de redirection d'une commande DOS
    Par WriteLN dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 10/06/2003, 09h36
  5. [reseaux] redirection de flux
    Par Olive1808 dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 12/08/2002, 09h24

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