[php] protection des pages web

Fermé
socquetsarah
Messages postés
162
Date d'inscription
vendredi 26 mai 2006
Statut
Membre
Dernière intervention
26 juin 2008
- 7 juin 2006 à 11:25
 carlito - 19 sept. 2008 à 22:15
bonjour,
je suis en train de créer une site intranet et une partie des pages est protegée par un login et un mot de passe.
mon soucis est que si l'utilisateur saisit l'adresse url qui est protegé par un login, il peut rentrer sans saisir le login sur la page qui est protégé.

c'est a dire que si la page où on saisit le mot de passe est login.html, le programme qui verifie si le login est bon est vérification.php et que la page de résultat est resultat.php; l'utilisateur qui saisit juste l'adresse du resultat.php, il rentre sur cette page. je voudrais savoir la fonction php pour qu'il ne puisse rentrer sur cette page quand passant par login.html?

j'ai utilisé le language php et html pour créer le site intranet.

Bonne apres midi

7 réponses

salut je t'envoie un code qui marche avec php et mysql :
D'abord tu créés une Base de données dans phpmyadmin puis tu créés une table que tu nommera membre dans cette table il y aura 3 champs :
id (type : INT ,extra : auto_incrément)
login (type : TEXT)
pass_md5 (type : TEXT)
Ensuite je vais faire une boucle de pages simple avec un index.php, une inscription.php, un membre.php et une deconection.php :
index.php doit contenir ceci :
if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass']))) {

$base = mysql_connect ('localhost', 'ton_pseudo', 'ton_mot_de_passe');
mysql_select_db ('nom_de_la_base_de_données', $base);

// on teste si une entrée de la base contient ce couple login / pass
$sql = 'SELECT count(*) FROM membre WHERE login="'.mysql_escape_string($_POST['login']).'" AND pass_md5="'.md5(mysql_escape_string($_POST['pass'])).'"';
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$data = mysql_fetch_array($req);

mysql_free_result($req);
mysql_close();

// si on obtient une réponse, alors l'utilisateur est un membre
if ($data[0] == 1) {
session_start();
$_SESSION['login'] = $_POST['login'];
header('Location: membre.php');
exit();
}
// si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son login, soit dans son mot de passe
elseif ($data[0] == 0) {
$erreur = 'Compte non reconnu.';
}
// sinon, alors la, il y a un gros problème :)
else {
$erreur = 'Probème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.';
}
}
else {
$erreur = 'Au moins un des champs est vide.';
}
}
?>
<html>
<head>
<title>Accueil</title>
</head>

<body>
Connexion à l'espace membre :<br />
<form action="index.php" method="post">
Login : <input type="text" name="login" value="<?php if (isset($_POST['login'])) echo htmlentities(trim($_POST['login'])); ?>"><br />
Mot de passe : <input type="password" name="pass" value="<?php if (isset($_POST['pass'])) echo htmlentities(trim($_POST['pass'])); ?>"><br />
<input type="submit" name="connexion" value="Connexion">
</form>
<a href="inscription.php">Vous inscrire</a>
<?php
if (isset($erreur)) echo '<br /><br />',$erreur;
?>
</body>
</html>
Puis la page membre.php doit contenir ceci :
<?php
session_start();
if (isset($_SESSION['login'])) {
?>
<html>
<head>
<title>Espace membre</title>
<?php
include("menu2.php");
?>
</head>
<body>
<a href="deconnexion.php">Déconnexion</a></div>
</body>
</html>
<?php
}
else
{
header ('Location:index.php');
exit();
}
?>
Ta page de deconection doit contenir cela :
<?php
session_start();
session_unset();
session_destroy();
header('Location: index.php');
exit();
?>
Et ta page d'inscription doit contenir cela :
<?php
// on teste si le visiteur a soumis le formulaire
if (isset($_POST['inscription']) && $_POST['inscription'] == 'Inscription') {
// on teste l'existence de nos variables. On teste également si elles ne sont pas vides
if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass'])) && (isset($_POST['pass_confirm']) && !empty($_POST['pass_confirm']))) {
// on teste les deux mots de passe
if ($_POST['pass'] != $_POST['pass_confirm']) {
$erreur = 'Les 2 mots de passe sont différents.';
}
else {
$base = mysql_connect ('localhost', 'root', '');
mysql_select_db ('coursphp', $base);

// on recherche si ce login est déjà utilisé par un autre membre
$sql = 'SELECT count(*) FROM membre WHERE login="'.mysql_escape_string($_POST['login']).'"';
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$data = mysql_fetch_array($req);

if ($data[0] == 0) {
$sql = 'INSERT INTO membre VALUES("", "'.mysql_escape_string($_POST['login']).'", "'.md5(mysql_escape_string($_POST['pass'])).'")';
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());

session_start();
$_SESSION['login'] = $_POST['login'];
header('Location: membre.php');
exit();
}
else {
$erreur = 'Un membre possède déjà ce login.';
}
}
}
else {
$erreur = 'Au moins un des champs est vide.';
}
}
?>
<html>
<head>
<title>Inscription</title>
</head>

<body>
<DIV align=center>Inscription à l'espace membre :<br />
<form action="inscription.php" method="post">
Login : <input type="text" name="login" value="<?php if (isset($_POST['login'])) echo htmlentities(trim($_POST['login'])); ?>"><br />
Mot de passe : <input type="password" name="pass" value="<?php if (isset($_POST['pass'])) echo htmlentities(trim($_POST['pass'])); ?>"><br />
Confirmation du mot de passe : <input type="password" name="pass_confirm" value="<?php if (isset($_POST['pass_confirm'])) echo htmlentities(trim($_POST['pass_confirm'])); ?>"><br />
<input type="submit" name="inscription" value="Inscription">
</form>
<?php
if (isset($erreur)) echo '<br />',$erreur;
?></div>
</body>
</html>
5
je vois pas ou est ta protection de toutes tes pages !!!!! La tu protege juste la page d'identification !!! si l'utilisateur rentre l'url dans la barre d'adresse ta page d'identification ne sert a rien !!!
0
Salut,
Moi,ce code me donne comme reponse "Erreur SQL !
SELECT count(*) FROM inscription WHERE login="joel" AND pass_md5="1e8e9abc7f2415d96c865d1b359a6190"
Champ 'pass_md5' inconnu dans where clause" lorsque je soumet le formulaire de contact de page index.php en rentrant le login et le password qui sont dans ma base de donné.A quoi cela est du?Car je n'arrive pas a décoller a caouse de cela.
0
sebsauvage
Messages postés
32844
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 654
7 juin 2006 à 11:46
Ben il faut contrôller que l'utilisateur a une session valide sur chaque page de ton site.
2
sebsauvage
Messages postés
32844
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 654
7 juin 2006 à 13:36
Vérifier que l'utilisateur a une session valide.
(voir la gestion des sessions dans php).

Et tu ne créé de session que dans la page de login ($_SESSION)

Si quelqu'un arrive dans la page protégée avec un cookie de session qui ne correspond à une session qui existe, il se fait jeter (rediriger vers la page de login).

Je ne suis pas un spécialiste du php, mais les pros du php devraient pouvoir t'expliquer ça.

(utiliser session_start(),
vérifier la sessions avec if (!isset($_SESSION['...']))...
etc.)
1
socquetsarah
Messages postés
162
Date d'inscription
vendredi 26 mai 2006
Statut
Membre
Dernière intervention
26 juin 2008
36
7 juin 2006 à 13:06
et on fait comment?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
socquetsarah
Messages postés
162
Date d'inscription
vendredi 26 mai 2006
Statut
Membre
Dernière intervention
26 juin 2008
36
7 juin 2006 à 14:20
je vais essayer. je te tiens au courant si ca ne marche pas. merci
0
Bonjour,

As-tu résolu ton problème? Car j'ai la même question!

Merci.
0
Maxence > missbobine
30 mars 2008 à 20:51
3 ans plus autant refaire un post je crois pas qu'il va se reconnecter et te dire : "salut, oui oui j'ai trouvé : tiens le code ... ! "

;)
0
voila un petit code qui vous aidra si vous avez encore besoin d
3 juil. 2008 à 12:21
<?php
session_start();// À placer obligatoirement avant tout code html

$_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 == "SITEDUZERO" AND $login == "ZOZOR") OR ($mot_de_passe == "MONSITEAMOI" AND $login == "POILU")OR ($mot_de_passe == "NONMONMIEN" AND $login == "ZOZORETTE") OR ($mot_de_passe == "KANGOUROU" AND $login == "JERRY"))
// Si le mot de passe et le login sont bons (valable pour 1 utilisateur ou plus). J'ai mis plusieurs identifiants et mots de passe.

{
$_SESSION['connect']=1; // Change la valeur de la variable connect. C'est elle qui nous permettra de savoir s'il y eu identification.
$_SESSION['login']=$login;// Permet de récupérer le login afin de personnaliser la navigation
// On affiche la page cachée.
?>
0
Ne serais-ce pas plus simple de protéger le répertoire de tes fichiers php avec un htaccess ?
0