[php] protection des pages web
Fermé
socquetsarah
Messages postés
163
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
carlito - 19 sept. 2008 à 22:15
A voir également:
- [php] protection des pages web
- Web office - Guide
- Supprimer des pages sur word - Guide
- Traduire une page web - Guide
- Adresse web - Guide
- Capture page web - Guide
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>
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>
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 659
7 juin 2006 à 11:46
7 juin 2006 à 11:46
Ben il faut contrôller que l'utilisateur a une session valide sur chaque page de ton site.
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 659
7 juin 2006 à 13:36
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.)
(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.)
socquetsarah
Messages postés
163
Date d'inscription
vendredi 26 mai 2006
Statut
Membre
Dernière intervention
26 juin 2008
35
7 juin 2006 à 13:06
7 juin 2006 à 13:06
et on fait comment?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
socquetsarah
Messages postés
163
Date d'inscription
vendredi 26 mai 2006
Statut
Membre
Dernière intervention
26 juin 2008
35
7 juin 2006 à 14:20
7 juin 2006 à 14:20
je vais essayer. je te tiens au courant si ca ne marche pas. merci
<?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.
?>
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.
?>
30 mai 2008 à 10:05
26 août 2008 à 14:26
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.