Création
d'entreprise
Posez votre question Signaler

[php] protection des pages web

socquetsarah 164Messages postés 26 mai 2006Date d'inscription - Dernière réponse le 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
Lire la suite 

[php] protection des pages web »

11 réponses
Réponse
+4
moins plus
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>
sly25 - 30 mai 2008 à 10:05
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 !!!
jojo - 26 août 2008 à 14:26
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.
Ajouter un commentaire
Réponse
+2
moins plus
Ben il faut contrôller que l'utilisateur a une session valide sur chaque page de ton site.
Ajouter un commentaire
Réponse
+1
moins plus
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.)
Ajouter un commentaire
Réponse
+0
moins plus
et on fait comment?
Ajouter un commentaire
Réponse
+0
moins plus
je vais essayer. je te tiens au courant si ca ne marche pas. merci
missbobine - 7 mars 2008 à 13:12
Bonjour,

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

Merci.
Maxence - 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 ... ! "

;)
Ajouter un commentaire
Réponse
+0
moins plus
<?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.
?>
Ajouter un commentaire
Réponse
+0
moins plus
Ne serais-ce pas plus simple de protéger le répertoire de tes fichiers php avec un htaccess ?
Ajouter un commentaire
Ce document intitulé « [php] protection des pages web » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?