Créer un compte
Connexion

[URGENT !]Protéger une page d'administration

Pour créer et répondre aux sujets, vous devez être connecté.
Ce sujet est résolu.
Pages: 1
Auteur Message
Lolo44
28/11/2010 à 21:07:57
Lolo44
Membre
Bonjour,
J'aimerais savoir comment protéger une page php grace aux sessions.
Donc selon le pseudo et le mdp rentrés , la page s'affiche ou ne s'affiche pas (dans ce cas son redirige ou on affiche un message d'erreur)

Merci de vos réponses


ybouane
30/11/2010 à 01:16:06
ybouane
Admin
Bonjour,
Pour proteger des pages par un mot de passe et en utilisant les sessions, il faut dabord faire une page de connexion.
tu peut l'appeler connexion_admin.php par exemple.
Et utilise ce code:
<?php
session_start();
if(isset($_SESSION['connexion_admin']))
{
        unset($_SESSION['connexion_admin']);
        echo 'Vous avez bien été déconnecté.';
}
else
{
        if(isset($_POST['pass']))
        {
                if($_POST['pass'] == 'Mot_de_passe_dadministration')
                {
                        echo 'Vous avez bien ete connecte en tant que Admin.';
                        $_SESSION['connexion_admin'] = true;
                }
                else
                {
                        echo 'Le mot de passe entre nest pas bon.';
                }
        }
        else
        {
?>
<form action="" method="post" style="margin-top:60px;text-align:center;">
Mot de passe: <input type="password" name="pass" /><br />
<input type="submit" value="Connexion" />
</form>
<?php
        }
}
?>
Il faut modifier Mot_de_passe_dadministration par le vrai mot de passe.

Pour ce connecter ou se deconnecter, il faut aller sur cette page.
Ensuite, il faut ajouter le code suivant dans les pages à protéger:
<?php
session_start();
if(isset($_SESSION['connexion_admin']))
{
//Code de la page a proteger
}
else
{
echo 'Vous devez être administrateur pour accéder a cette page.';
}
?>
Cordialement :)

Image
Lolo44
30/11/2010 à 22:18:30
Lolo44
Membre
Merci , mais il y a 2 erreurs : la premiere , <form action=""  method="post" style="margin-top:60px;text-align:center;"> Action n'est pas précisée , perso j'ai mis <form action="<?php echo $PHP_SELF ?>" method="post" style="margin-top:60px;text-align:center;">
 
Le seconde : Parse error: syntax error, unexpected T_STRING on line 5

La ligne 5 est en gras :

<?php
session_start();
if(isset($_SESSION['connexion_admin']))
{
Test admin
}
else
{
echo 'Vous devez être administrateur pour accéder a cette page.';
}
?>

J'ai essayé avec des ' ou des " mais ca ne marche pas ...

Je ne peux pas utiliser les sessions de l'espace membres plutot?

Spitfire 95
30/11/2010 à 21:52:41
Spitfire 95
Membre
<?php
session_start();
if(isset($_SESSION['connexion_admin']))
{
echo 'Test admin';
}
else
{
echo 'Vous devez être administrateur pour accéder a cette page.';
}
?>

Lolo44
30/11/2010 à 22:23:59
Lolo44
Membre
Mais bien sur ! Merci Spitfire 95 ! Je n'y avais pas réfléchis ...

Mais , maintenant est-ce possible de mettre un 'checkbox' 'restez connecter' ou 'Connexion automatique' , comme j'avais demandé précédemment ?


Spitfire 95
01/12/2010 à 13:06:41
Spitfire 95
Membre
Avec les cookies, pas avec les sessions, comme t'as dit Ybouane.

Lolo44
01/12/2010 à 15:29:32
Lolo44
Membre
Oui , mais je peux mettre un cookie dans ce srcipt?

(Tres debutant)

EDIT: (Tres debutant) je parlais de moi ;)

Spitfire 95
01/12/2010 à 14:01:20
Spitfire 95
Membre
Ça, je sais pas (suis pas très débutant, mais débutant tout court ^^).
Si Ybouane a dit qu'il fallait refaire le système pour qu'il utilise des cookies, je suppose que ce n'est pas deux lignes à ajouter, mais un gros changement. D'ailleurs, je dois pour un sélecteur de thème utiliser des cookies (faut que je m'y mette, mais j'ai la flemme ^^) et ça n'a rien à voir avec les $_SESSION. Donc le changement risque d'être gros.

Lolo44
01/12/2010 à 15:29:55
Lolo44
Membre
Ok merci ce n'est pas grave

Lolo44
02/12/2010 à 19:09:42
Lolo44
Membre
Oups , oups ,oups le code ne marche pas (dans les pages a proteger) si le code de la page contient des '
comment regler ca?
j'ai essaye de mettre des \ devants le ' ( donc \' ) mais ca ne change rien ...


ybouane
05/12/2010 à 04:17:45
ybouane
Admin
Bonjour,
Peut-tu donner le code pour qu'on puisse le corriger.

Cordialement :)

Image
Lolo44
05/12/2010 à 10:14:32
Lolo44
Membre
D'accord , merci .
Le voila  :exit:

<?php
session_start();
if(isset($_SESSION['connexion_admin']))
{
echo '
<h3>Administration , Membres detaillés </h3><br>
</td></tr>
</table>
</div>
 
 <!--Partie Orange-->
<div id="corps_page2">
<table bgcolor="white" width="631" >
  <tr>
    <td style="border:4px solid orange"> <br>
<h2><u>Administration</u></h2><br>

<table>
    <tr>
        <td style="border:4px dashed #33cc00">&nbsp;&nbsp;&nbsp;&nbsp;Id &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
        <td style="border:4px dashed #33cc00">&nbsp;&nbsp;&nbsp;Nom d'utilisateur&nbsp;&nbsp;&nbsp;</td>
                <td style="border:4px dashed #33cc00">&nbsp;&nbsp;Mot de Passe&nbsp;&nbsp;</td>
        <td style="border:4px dashed #33cc00">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Email</td>
                <td style="border:4px dashed #33cc00">&nbsp;&nbsp;&nbsp;Avatar&nbsp;&nbsp;&nbsp;</td>
                <td style="border:4px dashed #33cc00">&nbsp;&nbsp;Inscrit le :&nbsp;</th>
    </tr>
<?php
mysql_connect("xxx", "xxx", "xxx");
mysql_select_db("xxx");
//On recupere les identifiants, les pseudos et les emails des utilisateurs
$req = mysql_query('select id, username, password, email, avatar, signup_date from users');
while($dnn = mysql_fetch_array($req))
{
?>
        <tr>
        <td style="border:4px dotted #33cc00" class="left">&nbsp;&nbsp;&nbsp;&nbsp;<?php echo $dnn['id']; ?>&nbsp;&nbsp;&nbsp;&nbsp;</td>
        <td style="border:4px dotted #33cc00" class="left">&nbsp;&nbsp;&nbsp;<a target="_blank" href="../profile.php?id=<?php echo $dnn['id']; ?>"><?php echo htmlentities($dnn['username'], ENT_QUOTES, 'UTF-8'); ?></a>&nbsp;&nbsp;&nbsp;</td>
        <td style="border:4px dotted #33cc00" class="left">&nbsp;&nbsp;<?php echo $dnn['password']; ?>&nbsp;&nbsp;</td>        
                <td style="border:4px dotted #33cc00" class="left"><?php echo htmlentities($dnn['email'], ENT_QUOTES, 'UTF-8'); ?></td>
        <td style="border:4px dotted #33cc00" class="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a target="_blank" href="<?php echo $dnn['avatar']; ?>"><?php
if($dnn['avatar']!='')
{
        echo '<img src="'.htmlentities($dnn['avatar'], ENT_QUOTES, 'UTF-8').'" alt="Image Perso" width="20" height:"20";" />';}else{echo '<img src="../p1.png" alt="Image Perso" width="20" height="20" /> ';}?></td>
                <td style="border:4px dotted #33cc00" class="left">&nbsp;&nbsp;&nbsp;<?php echo date('d/m/Y',$dnn['signup_date']); ?>&nbsp;&nbsp;&nbsp;</td>
        </tr>
<?php
}
?>
</table>
<br><br><br><br>

';
}
else
{
echo '<img src="http://www.koopa-legends.legtux.org/ico_interdit.png" alt="Interdiction">Vous devez être administrateur pour accéder a cette page.';
}
?>
 


Spitfire 95
05/12/2010 à 11:42:51
Spitfire 95
Membre
Plutôt que mettre des echo interminables et complexes à utiliser à cause des " et des ', ferme les balises PHP. Je ne sais pas si ceci corrigera le problème, mais ce devrait être plus simple à lire et à corriger :
<?php
session_start();
if(isset($_SESSION['connexion_admin']))
{ ?>
<h3>Administration , Membres detaillés </h3><br>
</td></tr>
</table>
</div>
 
 <!--Partie Orange-->
<div id="corps_page2">
<table bgcolor="white" width="631" >
  <tr>
    <td style="border:4px solid orange"> <br>
<h2><u>Administration</u></h2><br>

<table>
    <tr>
        <td style="border:4px dashed #33cc00">&nbsp;&nbsp;&nbsp;&nbsp;Id &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
        <td style="border:4px dashed #33cc00">&nbsp;&nbsp;&nbsp;Nom d'utilisateur&nbsp;&nbsp;&nbsp;</td>
                <td style="border:4px dashed #33cc00">&nbsp;&nbsp;Mot de Passe&nbsp;&nbsp;</td>
        <td style="border:4px dashed #33cc00">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Email</td>
                <td style="border:4px dashed #33cc00">&nbsp;&nbsp;&nbsp;Avatar&nbsp;&nbsp;&nbsp;</td>
                <td style="border:4px dashed #33cc00">&nbsp;&nbsp;Inscrit le :&nbsp;</th>
    </tr>
<?php
mysql_connect("xxx", "xxx", "xxx");
mysql_select_db("xxx");
//On recupere les identifiants, les pseudos et les emails des utilisateurs
$req = mysql_query('select id, username, password, email, avatar, signup_date from users');
while($dnn = mysql_fetch_array($req))
{
?>
        <tr>
        <td style="border:4px dotted #33cc00" class="left">&nbsp;&nbsp;&nbsp;&nbsp;<?php echo $dnn['id']; ?>&nbsp;&nbsp;&nbsp;&nbsp;</td>
        <td style="border:4px dotted #33cc00" class="left">&nbsp;&nbsp;&nbsp;<a target="_blank" href="../profile.php?id=<?php echo $dnn['id']; ?>"><?php echo htmlentities($dnn['username'], ENT_QUOTES, 'UTF-8'); ?></a>&nbsp;&nbsp;&nbsp;</td>
        <td style="border:4px dotted #33cc00" class="left">&nbsp;&nbsp;<?php echo $dnn['password']; ?>&nbsp;&nbsp;</td>        
                <td style="border:4px dotted #33cc00" class="left"><?php echo htmlentities($dnn['email'], ENT_QUOTES, 'UTF-8'); ?></td>
        <td style="border:4px dotted #33cc00" class="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a target="_blank" href="<?php echo $dnn['avatar']; ?>"><?php
if($dnn['avatar']!='')
{
        echo '<img src="'.htmlentities($dnn['avatar'], ENT_QUOTES, 'UTF-8').'" alt="Image Perso" width="20" height:"20";" />';}else{echo '<img src="../p1.png" alt="Image Perso" width="20" height="20" /> ';}?></td>
                <td style="border:4px dotted #33cc00" class="left">&nbsp;&nbsp;&nbsp;<?php echo date('d/m/Y',$dnn['signup_date']); ?>&nbsp;&nbsp;&nbsp;</td>
        </tr>
<?php
}
?>
</table>
<br><br><br><br>

';
}
else
{
echo '<img src="http://www.koopa-legends.legtux.org/ico_interdit.png" alt="Interdiction">Vous devez être administrateur pour accéder a cette page.';
}
?>
Mais il est vrai qu'il manque les triple quotes comme en Python : """ """. Et même avec ça, on arrive à manquer de quotes ! xD

Lolo44
05/12/2010 à 12:00:29
Lolo44
Membre
Si je fais comme tu dis , ya un else , tout seul sans balise PHP!

Spitfire 95
05/12/2010 à 12:39:44
Spitfire 95
Membre
Et un '; qui ne ferme rien (ou j'ai mal lu/compris le code).
Avec ça, ça donne quoi ?
<?php
session_start();
if(isset($_SESSION['connexion_admin']))
{ ?>
<h3>Administration , Membres detaillés </h3><br>
</td></tr>
</table>
</div>
 
 <!--Partie Orange-->
<div id="corps_page2">
<table bgcolor="white" width="631" >
  <tr>
    <td style="border:4px solid orange"> <br>
<h2><u>Administration</u></h2><br>

<table>
    <tr>
        <td style="border:4px dashed #33cc00">&nbsp;&nbsp;&nbsp;&nbsp;Id &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
        <td style="border:4px dashed #33cc00">&nbsp;&nbsp;&nbsp;Nom d'utilisateur&nbsp;&nbsp;&nbsp;</td>
                <td style="border:4px dashed #33cc00">&nbsp;&nbsp;Mot de Passe&nbsp;&nbsp;</td>
        <td style="border:4px dashed #33cc00">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Email</td>
                <td style="border:4px dashed #33cc00">&nbsp;&nbsp;&nbsp;Avatar&nbsp;&nbsp;&nbsp;</td>
                <td style="border:4px dashed #33cc00">&nbsp;&nbsp;Inscrit le :&nbsp;</td>
    </tr>
<?php
mysql_connect("xxx", "xxx", "xxx");
mysql_select_db("xxx");
//On recupere les identifiants, les pseudos et les emails des utilisateurs
$req = mysql_query('select id, username, password, email, avatar, signup_date from users');
while($dnn = mysql_fetch_array($req))
{
?>
        <tr>
        <td style="border:4px dotted #33cc00" class="left">&nbsp;&nbsp;&nbsp;&nbsp;<?php echo $dnn['id']; ?>&nbsp;&nbsp;&nbsp;&nbsp;</td>
        <td style="border:4px dotted #33cc00" class="left">&nbsp;&nbsp;&nbsp;<a target="_blank" href="../profile.php?id=<?php echo $dnn['id']; ?>"><?php echo htmlentities($dnn['username'], ENT_QUOTES, 'UTF-8'); ?></a>&nbsp;&nbsp;&nbsp;</td>
        <td style="border:4px dotted #33cc00" class="left">&nbsp;&nbsp;<?php echo $dnn['password']; ?>&nbsp;&nbsp;</td>        
                <td style="border:4px dotted #33cc00" class="left"><?php echo htmlentities($dnn['email'], ENT_QUOTES, 'UTF-8'); ?></td>
        <td style="border:4px dotted #33cc00" class="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a target="_blank" href="<?php echo $dnn['avatar']; ?>"><?php
if($dnn['avatar']!='')
{
        echo '<img src="'.htmlentities($dnn['avatar'], ENT_QUOTES, 'UTF-8').'" alt="Image Perso" width="20" height:"20";" />';}else{echo '<img src="../p1.png" alt="Image Perso" width="20" height="20" /> ';}?></td>
                <td style="border:4px dotted #33cc00" class="left">&nbsp;&nbsp;&nbsp;<?php echo date('d/m/Y',$dnn['signup_date']); ?>&nbsp;&nbsp;&nbsp;</td>
        </tr>
<?php
}
?>
</table>
<br><br><br><br>
<? }
else
{
echo '<img src="http://www.koopa-legends.legtux.org/ico_interdit.png" alt="Interdiction">Vous devez être administrateur pour accéder a cette page.';
}
?>


Lolo44
05/12/2010 à 13:22:22
Lolo44
Membre
Impeccable !

Donc les codes sont :

<?php
session_start();
if(isset($_SESSION['connexion_admin']))
{
        unset($_SESSION['connexion_admin']);
        echo 'Vous avez bien été déconnecté.';
}
else
{
        if(isset($_POST['pass']))
        {
                if($_POST['pass'] == 'mdp_admin')
                {
                        echo 'Vous avez bien ete connecte en tant que Admin.';
                        $_SESSION['connexion_admin'] = true;
                }
                else
                {
                        echo 'Le mot de passe entre nest pas bon.';
                }
        }
        else
        {
?>
<form action="page.php" method="post" style="margin-top:60px;text-align:center;">
Mot de passe: <input type="password" name="pass" /><br />
<input type="submit" value="Connexion" />
</form>
<?php
        }
}
?>
 

Et:

<?php
session_start();
if(isset($_SESSION['connexion_admin']))
{ ?>
Code de la page a proteger
<? }
else
{
echo 'Vous devez être administrateur pour accéder a cette page.';
}
?>
 


Merci beaucoup Spitfire95 (encore une fois)

Aniss42
11/12/2010 à 08:53:29
Aniss42
Membre
slt tout le monde,je fesait un pti tour par ici et j'ai vu un truc louche je m'explique:

<?php
session_start();
if(isset($_SESSION['connexion_admin']))
{
        unset($_SESSION['connexion_admin']);
        echo 'Vous avez bien été déconnecté.';
}
else
{
        if(isset($_POST['pass']))
        {
                if($_POST['pass'] == 'Mot_de_passe_dadministration')
                {
                        echo 'Vous avez bien ete connecte en tant que Admin.';
                        $_SESSION['connexion_admin'] = true;
                }
                else
                {
                        echo 'Le mot de passe entre nest pas bon.';
                }
        }
        else
        {
?>
<form action="" method="post" style="margin-top:60px;text-align:center;">
Mot de passe: <input type="password" name="pass" /><br />
<input type="submit" value="Connexion" />
</form>
<?php
        }
}
?>

 
ca c'est le code donner par l'admin et justement a ligne

                if($_POST['pass'] == 'Mot_de_passe_dadministration')
                {
                        echo 'Vous avez bien ete connecte en tant que Admin.';
                        $_SESSION['connexion_admin'] = true;
                }
 
la le niveau de securité est au plus bas,car su quelq'un afiche le code source de la page ,il aura vu le mot de passe,et donc ton sit sera hacker
je demande confirmation de l'admin sur se point ,car c'est peut etre moi qui a tort
cordialement ;)


Lolo44
12/12/2010 à 16:45:46
Lolo44
Membre
Dans le code source il s'affiche :
<h2><u>Administration</u></h2><br>
 
 
<div id="admin" align="center">
<form action="" method="post">
Mot de passe: <input type="password" name="pass" /><br />
<input type="submit" value="Connexion" />
</form>
 
</div>


Aniss42
12/12/2010 à 13:19:29
Aniss42
Membre
ok merci de ta reponce,donc pas besoin de s''inquiter xd,aler je vous lesse ,bb

Pages: 1