Comment protéger certains pages ?

Fermé
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 - 4 mars 2011 à 23:29
MastercroW Messages postés 1094 Date d'inscription dimanche 3 octobre 2010 Statut Membre Dernière intervention 31 mai 2019 - 7 mars 2011 à 17:00
Bonjour,
Je suis complètement perdu !. Je tente depuis plusieurs semaines de protéger des pages du site http://soeix.free.fr/index.php?page=Administration_Bases&lang=Fr (premier sous menu de Administration). Je me suis servi du tuto http://www.siteduzero.com/tutoriel-3-32537-faire-un-systeme-de-droits-d-acces-grace-aux-operateurs-binaires.html pour que des personnes de l'asso puissent ajouter des membres avec des droits spécifiques (écrire un article, modifier un article etc...).
Pour ajouter une fiche j'avais fait le fichier suivant (mais l'authentification devrait se faire en comparant le contenu de la table users contenant le pseudo, le password (sha1) et droits).
<?
session_start();  // Démarrage de la session. A placer obligatoirement avant tout code html. Requière le dossier sessions chez Free.
// Page Ajout_Fiche:
$_SESSION['connect'] = 0; //initialise la variable 'connect'

if (isset($_POST['mot_de_passe']) AND isset($_POST['login'])) // Si les variables existent
{
        $mot_de_passe = $_POST['mot_de_passe'];
        $login = $_POST['login'];  //On récupère les données envoyées par la méthode POST du formulaire d'identification
}

else // Les variables n'existent pas encore
{
        $mot_de_passe = "";
        $login = ""; // On crée des variables $mot_de_passe  et $login vides
}

if (($mot_de_passe == "toto" AND $login == "test"))
// Si le mot de passe et le login sont bons (on peut mettre plusieurs utilisateurs. Dans ce cas, ajouter les dans le if). 

{
		$_SESSION['connect'] = 1;  // Change la valeur de la variable connect. 
		$_SESSION['login'] = $login;  // Permet de récupérer le login afin de personnaliser la navigation

// On affiche la page cachée.
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
// mon formulaire ici
</body>
</html>
<?php
}
else // le mot de passe n'est pas bon
{
// On affiche la page d'authentification.
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
// le formulaire d'authentification ici
</head>
<body bgcolor="#E9E9E9">

  <table width="60%" align="center" border="0" cellspacing="0" cellpadding="6">
    <tr>
      <td>
<h3 align="center" class="red"> Cette page est réservée aux administrateurs uniquement ! </h3>
<p align="center"><em> Veuillez vous authentifier </em></p>
	</td></tr>
	<tr><td>
	<form method="post" name="authentification" id="authentification">
	<fieldset>
	<legend class="admin">&nbsp;&nbsp;<strong> Ajouter </strong> un client dans la base ?&nbsp;&nbsp;</legend>
	<p align="center">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<label for="login">Login</label> : <input type="text" name="login" id="login" tabindex="10" /></p>
<script type="text/javascript" language="JavaScript">document.authentification.login.focus();</script>
	<p align="center"><label for="mot_de_passe">Password</label> : <input type="password" name="mot_de_passe" id="mot_de_passe" tabindex="20" /></p>
	<p align="center"><input type="submit" value="Ajouter" tabindex="21" /></p>
	</fieldset>
	</form>
	  </td></tr>
      <td>
	<form method="post" name="authentification" id="authentification">
	<fieldset>
	<legend class="admin">&nbsp;&nbsp;<strong> Modifier </strong> les coordonnées d'un client&nbsp;&nbsp;</legend>
	<p align="center">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<label for="login">Login</label> : <input type="text" name="login" id="login" tabindex="30" /></p>
<script type="text/javascript" language="JavaScript">document.authentification.login.focus();</script>
	<p align="center"><label for="mot_de_passe">Password</label> : <input type="password" name="mot_de_passe" id="mot_de_passe" tabindex="40" /></p>
	<p align="center"><input type="submit" value="Modifier" tabindex="41" /></p>
	</fieldset>
	</form>
	  </td>
    </tr>
  </table>
<?php
} // Fin du else (si le mot de passe n'était pas bon).
// Fin du code :)
?>
</body>
</html>
Comme vous pouvez le voir, le user et le pass sont écrits en dur dans le code.
C'était ma première version de la page. Mais cette façon de faire ne peut pas coller avec le système de gestion des droits. Comment pourrais-je mettre le formulaire d'authentification dont voici le code:
<?php 
session_start(); // On démarre les sessions
 
	// Infos de connexion à la BDD
require 'Fonctions_Clients.php';

	// connection à la BDD
$link = mysql_pconnect ($host,$user,$pass) or die ('Erreur : '.mysql_error() ); // connection à la base
mysql_select_db($db) or die ('Erreur : '.mysql_error() ); // sélection de la table
 
$select = mysql_query('SELECT * FROM permissions')or die(mysql_error()); // On sélectionne les groupes
 
if(isset($_POST['submit'])) // Si le formulaire a été validé
{
        $pseudo = htmlspecialchars($_POST['Pseudo']); // Son pseudo
        $password = sha1($_POST['Password']); // Son mot de passe, hashé grâce à la fonction sha1() (prononcer cha one)
 
        $id_groupe = $_POST['groupe']; // L'ID du groupe
 
 	// On insère le tout dans la table users !
        $insert = mysql_query('INSERT INTO users(id, pseudo, password, id_groupe) VALUES("", "'.$pseudo.'", "'.$password.'", "'.$id_groupe.'")')or die(mysql_error()); 
         
        if($insert) echo '<p align="center"><strong class="vert">L\'ajout de l\'utilisateur a réussi !</strong></p>'; // Si c'est bon, on affiche un message OK en vert
        else echo '<p align="center"><strong class="red">L\'ajout de l\'utilisateur a échoué !</strong></p>'; // Sinon, on affiche un message d'erreur en rouge
}
?>
A noter qu'ici, même si les champs sont vides on peut ajouter en cliquant sur le bouton Ajouter le rédacteur.
Je suis complètement à la rue à force de regarder, modifier, corriger.... je n'en peux plus.
De plus je suis une bille en matière de sécurité et ici c'est très important.

Idem pour ajouter un groupe: cette page devrait être protégée et les "modérateurs", au moins, devraient pouvoir s'authentifier ? Voici le code complet:
<?php 
session_start(); // On démarre la session
// Page Ajout_Groupe:
	// Infos de connexion à la BDD
require 'Fonctions_Clients.php';

	// connection à la BDD
$link = mysql_pconnect ($host,$user,$pass) or die ('Erreur : '.mysql_error() ); // connection à la base
mysql_select_db($db) or die ('Erreur : '.mysql_error() ); // sélection de la table

// on définit les constantes de droits. Une constante = un droit
// Pour plus d'info sur les valeurs des constantes, https://openclassrooms.com/fr/courses#ss_part_6 
define ('ECRIRE_ARTICLE', 0x01); // Ici on peut écrire un article
define ('SUPPRIMER_ARTICLE', 0x02); // Ici on peut supprimer un article
define ('MODIFIER_ARTICLE', 0x08); // Ici on peut modifier un article
define ('Ajout_Groupe', 0x10); // Ici on peut ajouter un groupe de permissions
define ('Modifier_Groupe', 0x20); // Ici on peut modifier un groupe de permissions
define ('Ajout_User', 0x40); // Ici on peut ajouter un membre dans un groupe de permissions
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=" />
<meta name="robots" content="index, follow" />
<meta name="author" content="Jean Michel Etchecolonea" />
<meta name="Description" content="La base nautique de Soeix-Oloron vous propose des activités d'eau vive pour toute la famille. Les descentes se déroulent sur les gaves d'Aspe, d'Ossau et d'Oloron." />
<meta name="Keywords" content="raft, rafting, Pyrénées, pyrenees, loisirs, plein air, kayak, hydro-speed, luge d'eau, hot dog, nage en eaux vives, canyonning, gîte, gite, hébergement, nautisme, sport détente, famille" />
<meta name="revisit-after" content="20 days" />
<meta http-equiv="imagetoolbar" content="no" /><!-- Empeche IE de mettre une barre sur les images //-->
<link href="/Modules/Icons/favicon.ico" rel="shortcut icon" />
<link href="/Scripts/Base_Soeix.css" type="text/css" rel="stylesheet" />
</head>
<body bgcolor="#F7F7F7">
<?php
if(isset($_POST['Nom'])) // Si le formulaire a été validé, on peut effectuer les actions PHP
{
        $nom = $_POST['Nom']; // Le nom du groupe
        
        if( $_POST['Ajout_Article'] == 'ajout_article_oui')  // Si dans le formulaire, on a indiqué qu'un membre de ce groupe peut écrire un article.
        {
                $droits |= ECRIRE_ARTICLE; // On ajoute la permission dans la variable $droits
        }
        if( $_POST['Modifier_Article'] == 'modifier_article_oui') // Si dans le formulaire, on a indiqué qu'un membre de ce groupe peut modifier un article.
        {
                $droits |= MODIFIER_ARTICLE;
        }
        if( $_POST['Supprimer_Article'] == 'supprimer_article_oui') // Si dans le formulaire, on a indiqué qu'un membre de ce groupe peut supprimer un article.
        {
                $droits |= SUPPRIMER_ARTICLE;
        }
		if( $_POST['Ajout_Groupe'] == 'ajout_groupe_oui') // Si dans le formulaire, on a indiqué qu'un membre de ce groupe peut ajouter un groupe. 
        {
                $droits |= Ajout_Groupe;
        }
        if( $_POST['Modifier_Groupe'] == 'modifier_groupe_oui') // Si dans le formulaire, on a indiqué qu'un membre de ce groupe peut modifier un groupe.
        {
                $droits |= Modifier_Groupe;
        }
        if( $_POST['Ajout_User'] == 'ajout_user_oui') // Si dans le formulaire, on a indiqué qu'un membre de ce groupe peut ajouter un membre dans un groupe.
        {
                $droits |= Ajout_User;
        }
	// On prépare la requête, ça va ajouter les permissions stockées dans $droits, ainsi que le nom
        $requete = 'INSERT INTO permissions(nom, permissions) VALUES ("'.$nom.'", "'.@$droits.'")'; 
        
        $ex_requete = mysql_query($requete)or die(mysql_error()); // On exécute la requête ou on affiche une erreur
	// Si c'est OK, on affiche un message en vert disant que c'est bon.
        if($ex_requete) echo '<p align="center"><strong class="vert">Le groupe a bien été ajouté !</strong><br />'; 
	// Sinon, on  affiche une erreur en rouge disant que ce n'est pas bon.
        else echo '<strong class="red">Le groupe n\'a pu être ajouté !</strong></p>'; 
		}
?>
<p>&nbsp;</p>
  <table width="40%" align="center" border="0" cellspacing="0" cellpadding="6" bgcolor="#FFFFFF">
    <tr>
      <td>
                                             <!-- FORMULAIRE -->
<p align="center"><strong> Gestion des permissions </strong></p>
<p> Vous pouvez ajouter un groupe de permissions. Pour cela, il vous suffit de renseigner les champs ci-dessous. </p>

<form name="Groupes" class="formajout" method="post">
<p><label for="Nom" class="alignement">Nom du groupe : </label><input type="text" name="Nom" /></p>
 
<p><label for="Ajout_Article" class="alignement"> Possibilité d'ajouter un article : </label>
       <select name="Ajout_Article" id="Ajout_Article">
           <option value="ajout_article_oui"> Oui </option>
           <option value="ajout_article_non"> Non </option>
       </select></p>
 
<p><label for="Mod_membre" class="alignement"> Possibilité de modifier un article : </label>
       <select name="Modifier_Article" id="Modifier_Article">
           <option value="modifier_article_oui"> Oui </option>
           <option value="modifier_article_non"> Non </option>
       </select></p>
 
<p><label for="Supprimer_Article" class="alignement"> Possibilité de supprimer un article : </label>
		<select name="Supprimer_Article" id="Supprimer_Article">
    		<option value="supprimer_article_oui"> Oui </option>
    		<option value="supprimer_article_non"> Non </option>
  		</select></p>

<p><label for="Ajout_Groupe" class="alignement">Ajouter un groupe de permissions : </label>
       <select name="Ajout_Groupe" id="Ajout_Groupe">
           <option value="ajout_groupe_oui"> Oui </option>
           <option value="ajout_groupe_non"> Non </option>
       </select></p>

<p><label for="Modifier_Groupe" class="alignement">Modifier / Supprimer un groupe de permissions : </label>
       <select name="Modifier_Groupe" id="Modifier_Groupe">
           <option value="modifier_groupe_oui"> Oui </option>
           <option value="modifier_groupe_non"> Non </option>
       </select></p>

<p><label for="Ajout_User" class="alignement">Ajouter un utilisateur dans un groupe : </label>
       <select name="Ajout_User" id="Ajout_User">
           <option value="ajout_user_oui"> Oui </option>
           <option value="ajout_user_non"> Non </option>
       </select></p>

<p align="center"><input type="submit" name="creer" value="Créer le groupe" /></p>
</form>
</td>
    </tr>
  </table>
</body>
</html>

J'aurai besoin d'un sérieux coup de main avec surtout des commentaires si vous faites des corrections dans les codes (sinon ça m'est complètement inutile. Il faut que je puisse comprendre. Merci d'avance aux connaisseurs de la sécurisation des accès aux pages réservées.




Le bonheur est la seule chose que l'on peut donner sans l'avoir.

2 réponses

txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 517
7 mars 2011 à 16:50
Alors personne ? Mon seul problème c'est l'intégration d'un formulaire d'authentification dans chaque page comme Ajout_Groupe Fr.php par exemple.

Merci d'avance !
Le bonheur est la seule chose que l'on peut donner sans l'avoir.
0
MastercroW Messages postés 1094 Date d'inscription dimanche 3 octobre 2010 Statut Membre Dernière intervention 31 mai 2019 163
7 mars 2011 à 17:00
Salut,
Je vais te donner une réponse brièvement courte, mais je pense que tu comprendra vu le niveau de ton PHP.

Base de données :
Tu rajoutes une colonne dans ta table membre, qui est par exemple ADMIN.
Tu mets par Default 0.
Ensuite, tu mettra 1 si la personne est administrateur dans ta ligne.

Niveau PHP :
Tu fera un if dans le titre par exemple :
<title>
<?php
if ($_SESSION['admin'] == 1)
{
echo 'Accès administrateur'; // Si il est admin on laisse l'accès
}
else
{
header("Location: index.php"); // Si le membre n'est pas admin on fait un Location
}
?>
</title>


J'espère t'avoir aider.
Sinon à la place de mettre ça dans le titre, tu peux mettre sa ou tu mets ton texte.
A la place de faire un Location tu mets un message d'erreur !
0