Avis sur mon espace membre

Bonjour,

c'est le premier espace membre que je crée et je voudrai avoir votre avis sur sa fonctionnalité et sa sécurité.

Merci de votre aide


connect.php

<?php
session_start();
include ('connect.php'); // identifiant bdd

if( (!empty($_POST['pseudo'])) AND (!empty($_POST['mdp'])) )

{

//on recupere les post du formulaire
$pseudo=strip_tags($_POST['pseudo']);
$mdpa=strip_tags($_POST['mdp']);

$rep = mysql_query("SELECT mdp FROM membre WHERE pseudo='$pseudo'")or die('Erreur Connexion ');
$data = mysql_fetch_assoc($rep);

if($data['mdp'] != $mdpa)
{
header ('Location: connection2.php');
exit();

}
else
{

$rep2=mysql_query("SELECT * FROM membre");
while ($data2=mysql_fetch_array($rep2))
{
$idm=$data2['id'];
}
$_SESSION['idm'] = $idm;
$_SESSION['pseudo'] = $pseudo;

$cle=rand(1000000, 9999999));
setcookie('cfpseudo',$pseudo,time()+7200);
setcookie('cfcle',$cle,time()+7200);

mysql_query("UPDATE membre SET cle='$cle' WHERE pseudo='$pseudo'");

header ('Location: pageprive.php');

}
}
else
{
header ('Location: connection2.php');
exit();
}

?>

page protgé.php

<?php

session_start();
include ('connect.php'); //identifiant

if((!isset($_SESSION['pseudo'])) AND (!isset($_COOKIE['cfpseudo'])) AND (!isset($_COOKIE['cfcle'])))
{
echo 'Vous n\'êtes pas autorisé à acceder à cette zone';
header ('Location: index.php');
exit();
}

$reponse=mysql_query("SELECT * FROM membre");
while ($data=mysql_fetch_array($reponse))
{
$bcle=$data['cle'];
$bpseudo=$data['pseudo'];
$bidm=$data['id'];

if ((isset($_SESSION['pseudo'])) AND ((isset($_COOKIE['cfpseudo'])) AND (isset($_COOKIE['cfcle']))))
{

if ((isset($_SESSION['pseudo'])) AND ($_SESSION['idm']==$bidm))
{

$sespeudo=$_SESSION['pseudo'];
$sesidm=$_SESSION['idm'];
$verifses=1;

}
else
{
$verifses=0;
}

if ((isset($_COOKIE['cfpseudo'])) AND (isset($_COOKIE['cfcle'])))
{
$cokpseudo=$_COOKIE["cfpseudo"] ;
$cokcle=$_COOKIE["cfcle"] ;
$verifcok=1;
}

else
{
$verifcok=0;
}

if (($bpseudo==$cokpseudo) AND ($bpseudo==$sespeudo) AND ($bcle==$cokcle) AND ($verifses=1) AND ($verifcok=1) AND ($bidm==$sesidm))

{
///// site

}

}
else
{
header ('Location: index.php');
exit();
}

}

?>

2 réponses

  1. Tu ne sécurises pas tes variables POST contre les injections SQL.
    J'utilise plutôt la fonction strip_tags (ou similaire : htmlspecialchars, htmlentities) lors de l'affichage des données, pas à l'enregistrement.
    $rep2 = mysql_query("SELECT * FROM membre");
    while ($data2=mysql_fetch_array($rep2)) {
        $idm=$data2['id'];
    }
    $_SESSION['idm'] = $idm;
    $_SESSION['pseudo'] = $pseudo;
    Dans ce script, tu récupères l'ID du dernier membre. Perso, je récupère l'id en même temps que le mot de passe, ainsi, une requête SQL suffit.
    L'utilisation de PDO ne serait pas de refus.

    Voilà +/- comment je procède :
    <?php
    session_start();
    
    if(isset($_SESSION['id'])) {
        echo 'Vous êtes déjà connecté';
    } else {
    	if(!empty($_POST['login']) && !empty($_POST['password'])) {
    		$pdo = new PDO('mysql:host=localhost;dbname=ta_base','root','');
    
    		$sql = 'SELECT id, password FROM membres WHERE login = '.$pdo->quote($_POST['login']);
    		$req = $pdo->query($sql);
    		$membre = $req->fetch(PDO::FETCH_OBJ);
    	
    		if($req->rowCount() > 0) {
    			if($membre->password == md5($_POST['password'])) {
    				$_SESSION['id'] = $membre->id;
    				header('Location: profil.php');
    			} else {
    				echo 'Le mot de passe est invalide.';
    			}
    		} else {
    			echo 'Le membre « '.$_POST['login'].' » n\'existe pas.';
    		}
    	} else {
    		afficherFormulaire();
    	}
    }
    ?>
    1
    1. Merci pour tes conseils
      je vais regarder qu'est une PDO car je connais pas
      0
    2. PDO est une classe qui permet d'accèder aux bases de données.
      C'est lui qui remplacera les fonctions « mysql_ » dans les futures versions de PHP.

      https://www.commentcamarche.net/faq/27489-pdo-une-autre-facon-d-acceder-a-vos-bases-de-donnees
      0
  2. Le gros copié-collé !

    A priori c'est bon, après je n'ai pas testé.
    -1
    1. c'est pas un copié collé
      je me suis inspiré de plusieurs tuto et j'ai fait des modification personnel c'est pour ça que je demande conseil.
      0