Protéger un espace d'administration

Présentation
Ce code permet de protéger l'accès à une page.

Pour l'essayer :

* Lancer la page sur le serveur
* Saisissez les informations telles que le login et le mot de passe
* Cliquer sur OK

Pour changer le login et le mot de passe, regarder dans le code, tout y est expliqué.
Téléchargement
0  0 
Téléchargé 327 fois Voir le commentaire
Détails
Éditeur : Ludovic Giambiasi   +
Licence : Autre
Date de mise en ligne : 15 février 2011




Avatar de PapyWeb PapyWeb - Nouveau Candidat au Club https://www.developpez.com
le 21/02/2011 à 6:01
Bonjour,

Merci à Ludovic pour son code.

Je n'ai pas trop aimé d'abord les fautes d'orthographe.

Ensuite, il ne marche pas. A moins d'avoir réglé register_globals à ON (ce qui n'est pas très protecteur).
Si on n'a pas accès au php.ini, on peut le faire fonctionner (php >=4.2.0) en ajoutant au début la ligne
Code : Sélectionner tout
extract($_REQUEST,EXTR_OVERWRITE);
Ensuite, l'idée de passer par GET dans un "protection.php" n'est pas fameuse.
voir http://blog.developpez.com/julienpau...p-self-et-xss/

Au lieu de :
<form method="post" action="<? print "$PHP_SELF?entreeludo=2"; ?>">

Faire :
<form method="post" action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>">
<input type='hidden' name='entreeludo' value='2'>

C'est moins tentant à attaquer.

$log="ton_login_ici"; // change ton login ici
$pwd="ton_pass_ici"; // change ton password ici
// *************************
$log=ereg_replace("\n", "", $log);
$pwd=ereg_replace("\n", "", $pwd);

if (strcmp($login, $log) != 0) { //$login est la variable du formulaire précédent
print "\n<center><b>Le login est incorrect</b><br><br><a href=\"protection.php\">RETOUR</a></center>";
exit; // on n'exécute pas la suite du si si le login est faut...

Pourquoi nettoyer $log et $pwd ? ereg_replace ne sert à rien, on vient de les coder en dur!

Je n'ai pas trop aimé l'excès de variables inutiles. "entreeludo" prend 3 valeurs, or seule $entreeludo=2 est utilisée...
$entreeludo=3; // entreeludo prend la variable 3 (login et pass sont bon si on arrive là)
$go="okludo"; // la variable go prend la valeur "okludo" pour afficher la partie protégée.
}
if ($go == "okludo") { // Début de la page d'administration

Curieusement, en supprimant ces lignes, tout va bien...

Je propose donc à Ludovic une version amaigrie de son code :
Code : Sélectionner tout
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
<?php 
$login=$_POST['login']; 
$password=$_POST['password']; 
if(isset($login)) { // on arrive du formulaire  
    $log="ton_login_ici"; // change ton login ici 
    $pwd="ton_pass_ici"; //  change ton password ici 
    if ((strcmp($login, $log) != 0)||(strcmp($password, $pwd) != 0)) { 
// Ne facilitons pas la tâche aux malveillants - Le test est fait sur la paire login/password 
       	 print "<html><body style=\"text-align:center\"><b>Vous n'êtes pas reconnu.</b><br />Vérifiez SVP.<br /><a href=\"". 
		htmlentities($_SERVER['PHP_SELF'])."\">RETOUR</a></body></html>"; 
// petite page bien formée qui efface  la paire login/password 
       	 exit; } 
// Ou bien un header("Location: etc... ou bien : 
     echo "<html><body><h1>TE VOILA DANS L'ESPACE ADMINISTRATION DE TON SITE.<br /><br />SEULES LES PERSONNES AYANT LE MOT DE PASSE ET LE LOGIN PEUVENT Y ENTRER.</h1>"; 
/* ATTENTION DANS LE CAS D'UNE UTILISATION D'UN FORMULAIRE AVEC ENVOI DE DONNEES DANS CETTE PARTIE, IL faut METTRE : 
 <form method="post" ACTION='princip.php'> 
<input type='hidden' name='go' value='okludo'> 
<input type='hidden' name='entreeludo' value='3'> 
...... 
// Mettre ici tout ton espace administration --> 
// Fin  de la page d'administration 
*/ 
} 
else { // la première connexion à la page ou sur un échec 
echo <<<EOF 
<html> 
<head> 
<title>ESPACE ADMINISTRATION - PAGE PROTEGEE</title> 
<style type="text/css"> 
  td {font-family:"Verdana";font-size:12pt} 
  body, .centre {text-align:center} 
</style> 
</head> 
<body> 
    <br /><h2>Saisissez votre login et votre mot de passe</h2><br /> 
    <form method="post" action=""> 
    <table align=center> 
	<tr><td>Login : </font></td> 
	<td><input type="text" name="login" size=15></td></tr> 
    	<tr><td>Mot de passe : </font></td> 
	<td><input type="password" name="password" size=15></td></tr> 
	<tr><td class="centre" colspan="2"><input type="submit" name="enter" value="- OK -" style="cursor:hand;color:blue;font:bold;"></td></tr> 
    </table><br /> 
    </form> 
<br />Espace Administration protégé 
<br />Par Ludovic Giambiasi 
</body> 
</html> 
EOF; 
} 
?>


Enfin, une question à Ludovic que mets-tu dans le fichier ".htaccess" de la zone protégée ?

A+
Developpez.com décline toute responsabilité quant à l'utilisation des différents éléments téléchargés.
Contacter le responsable de la rubrique PHP