[php] sécurisé accès page [Résolu/Fermé]

Signaler
-
 stiti -
salut,

nous avons créer un formulaire demandant à l'utilisateur de rentrer son mot de passe et login lui permettant d'accéder à une page précise. Le problème est que cette page est visible dans la barre des adresses. Comment sécuriser l'accés pour que l'utilisateur ne tape pas le nom de la page et accède a cette dernière.

On m a parlé de htaccess ??

Merci d'avance

19 réponses

c trés facile en utilisant les sessions !!

regarde mon exemple précedent:

il suffit d'ajouter le code suivant à chaque page que tu veux protéger
<?php
if (!$loginOK) {
header('Location: login.php');
}
?>

dans l'exemple prec on change $loginOk à true si le login et mot de passe existe dans la base de données
alors il suffit de tester ce $loginOk a chaque fois q'on veut accéder à la page
si true
on autorise l'affichage de la page
sinon
on redirige l'utilisateur vers la page d'identification login.php

j'espere que ça vous aide !!
bonne contuniation
9
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 76687 internautes nous ont dit merci ce mois-ci

J'ai un peu de mal à mettre en œuvre cette méthode. Aucun problème pour l'authentification ni pour la redirection vers une page html. Par contre, lorsque que je rajoute le petit bout de code qui permet de sécuriser les pages à protéger (qui deviennent donc des .php) je suis systématiquement renvoyé vers la page d'authentification.

En analysant un peu, je me demande s'il n'y a pas un problème de portée de la variable loginOK, parce qu'elle ne semble pas être initialisée dans le script de la page à sécuriser.
J'ai dû utiliser la variable $_SESSION['loginOK'] à la place de $loginOK pour que ça marche. J'ai peut-être loupé quelque chose.

En tout cas, merci pour les explications.
Messages postés
2289
Date d'inscription
mercredi 1 octobre 2003
Statut
Contributeur
Dernière intervention
1 octobre 2007
487
Salut,

Pour sécuriser l'accès à un page, tu as, à ma connaissance, deux moyens.

Les .htaccess :
Avec ça, tu peux protéger l'accès à tout un répertoire de ton site, de manière très sécurisée, mais pas très pratique si tu veux faire une administration complète du site.
http://www.infres.enst.fr/~danzart/frames/htaccess.html

et

Le php :
Pour ça, je te conseil d'utiliser les sessions. Tu fais un formulaire de login que tu envoie sur une page de vérification. Si les login et mot de passe sont juste, alors tu enregistre une session et tu redirige le visiteur vers la page, sinon tu reviens au formulaire. Ensuite, sur la page à protéger, tu vérifie que la session à été enregistrée, et sinon, tu renvoie le visiteur sur le formulaire.
http://www.phpdebutant.org/article69.php

@+
Je te remercie.
Messages postés
2289
Date d'inscription
mercredi 1 octobre 2003
Statut
Contributeur
Dernière intervention
1 octobre 2007
487
Petite précision, comme tu l'aura peut-être remarqué, je suis plus à l'aise avec la version php (la version htaccess, je l'ai essayée une fois 30mn sans la voir fonctionner et depuis je ne l'ai, peut-être à tort, plus touchée :P).

Donc si tu as des problèmes et que tu as décidé d'utiliser php, je devrait pouvoir t'aider. Et htaccess ... peut-être ^^.

Donc n'hésite pas à revenir si tu as des problèmes ;)
Messages postés
4
Date d'inscription
samedi 23 août 2008
Statut
Membre
Dernière intervention
27 août 2008
4
Bonjour,

J'ai le meme pb que celui cité au premier message
J'ai bien lu les posts, mais je n'ai pas vraiment la réponse a mon probleme :

Je voudrais mettre en ligne les résultats de mes élèves avec acces par login et mot de passe.

les fichiers élèves sont dans par exemple .../RESULTATS/ELEVE1/fichiers.. RESULTATS/ELEVE2/fichiers..

La solution des .htaccess placés dans chaque ss repertoire ELEVEx fonctionne bien mais je voudrais une gestion dynamique ( par l'utilisateur ) des mots de passe : je passe donc par une base de de données qui gère login et password et je m'interdis les .htaccess.

L'eleve 1 tape son login et mot de passe , validé via la base de données, et il est alors dirigé vers une page par exemple accueil.html dans le repertoire ELEVE1.

Le pb est qu'il suffit de taper l'adresse .../RESULTATS/ pour voir la liste des ss repertoires et des fichiers
dans : Index of ... .../RESULTATS/


et l'acces est alors immédiat et non protégé.

On ne peut pas non plus masquer l'adresse ...

Existe-il une solution permettant de donner un acces protégé à une page par login et password gérés dans une base de données, et sans .htaccess ?

Merci.
Messages postés
4
Date d'inscription
samedi 23 août 2008
Statut
Membre
Dernière intervention
27 août 2008
4
Merci
OK je comprends le principe je m'en vais l'essayer de ce pas !
Messages postés
4
Date d'inscription
samedi 23 août 2008
Statut
Membre
Dernière intervention
27 août 2008
4
Rebonjour,

ça fonctionne sans pb a condition de pouvoir modifier le contenu de la page à protéger.

Je dispose au moins d'une cinquantaine de pages HTML générés par des macro par le tableur d'openoffice et je ne me vois pas ajouter les quelques lignes a chaque fichier.

Peut-on automatiser cette transformation ? ( peut etre par un editeur de texte word ou writer et des macros...)

Merci.
pour l'automatisation de l'opération je connais pas trop.
par contre je vous propose de maiitre tout vos fichiers à sécuriser d'un dossier que vous le sécuriser par un fichier .htaccess
pour cela:
-creer 2 fichier un .htaccess et un .htpasswd

##### code de .htaccess ######

AuthName "Accès réservé"
AuthType Basic
AuthUserFile /kunden/homepages/19/d170958/htdocs/.htpasswd
Require valid-user

#### code de .htpasswd ######

azer:rM8nnqh5HBLLk
azert:rMssd8nnqsddh5HB


pour le .htaccess vous devez just changer AuthUserFile c le chemin absolu du fichier .htpasswd qui contient les login et les mots de passes , pour connaitre le chemin absolut du fichier vous pouvez maitre un fichier php qui contient l'instruction suivante
<?php phpinfo(); ?> puis lancez le dans un navigateur là vous trouverez tout les informations

pour le .htpasswd sur chaque ligne il ya 1 login suivi d1 mot de passe crypté
pour crypter les mot de passe vous pouvez utilisez http://shop.alterlinks.com/htpasswd/passwd.php


le fichier .htaccess doit etre dans le repertoire à sécuriser.

j'espère que ça vous aide
Messages postés
2
Date d'inscription
mercredi 27 mai 2009
Statut
Membre
Dernière intervention
27 juillet 2009
1
Ce n'est plus la peine de me répondre, j'ai arrêté mon site !
Pour la protection des espaces d'administration :

- Vaut mieux un htaccess (surtout si vous codez mal les script d'identification en php) et cela permet de rendre innaccessible TOUS les fichiers contenus dans les répertoires et sous répertoires.

Si quand même vous voulez passer par le php :

- Mettez des sessions à TOUS les scripts contenus dans les répertoires (même les includes... du genre menu.php car un pirate peut s'en serveur pour savoir les autres noms des pages avec les liens.)

- Regardez bien quelle est la configuration du serveur (si les magic quotes sont activées pour les identifications dont il faut chercher les identifiants dans la base de donnée. Cela pour éviter les injections SQL)

- Regardez si votre site ne possède pas d'include locale. ( de même dans le cas d'un htacess.

Pour reprendre vos dires :

Il vaut mieux en effet stocker les données dans une bdd avec le mot de passe en PASSWORD.

=> codage en MD5 (même si il existe des tables de correspondance)

Avec ça, tu peux protéger l'accès à tout un répertoire de ton site, de manière très sécurisée, mais pas très pratique si tu veux faire une administration complète du site.

=> il n'y a pas de problèmes pour avoir un accès à une administration complète, dui moment qu'elle est dans les sous répertoires ou dans les répertoires contenant le .htapasswd et le .htaccess. (d'ailleurs le htaccess sert à pliens de choses utiles...google)


Et puis voiloute, en tous les cas, pour contrer les pirates, ne nomez jamais un dossier d'administration : /admin/ ou /administration/ (trop devinable.) et aussi utilisez pas le même mot de passe partout !

Et puis, si un pirate veut vous attaquer, il n'aurra pas de mal.
Messages postés
23048
Date d'inscription
samedi 22 octobre 2005
Statut
Modérateur
Dernière intervention
22 novembre 2020
2 153
bonjour
il n'est pas obligatoire d'être inscrit ...
mais savoir à qui l'on répond sur le forum est toujours plus agréable pour les gens qui veulent aider !
alors ...inscrivez-vous
merci
b g
Messages postés
4
Date d'inscription
samedi 23 août 2008
Statut
Membre
Dernière intervention
27 août 2008
4
Bonsoir,

En reponse à anis : justement j'ai bien précisé que je ne voulais pas dans ce acs de .htaccess , car je veux que l'utilisateur puisse gérer son mot de passe.
Merci quand meme.


En réponse à bg62 : je ne comprends pas le message ??? je suis inscrit.

Eric
Bonjour,
Donc moi je voudrais ajouter sur mon site un code d'accès à 6 lettres (+ un identifiant si possible) dès la première page de mon site mais sans que l'adresse internet n'apparaisse sinon il suffit de modifier l'adresse pour entrer dans mon site :)
Je crée mon site avec XWebDesignor (http://www.toolbox.free.fr/
J'ai essayé tout ce que j'ai trouvé sur le net mais ça ne marche pas

PS: mon site n'est pas encore publié. Je ne sais si c'est pour ça que ça ne marche pas ?

Réponse Urgente

Cordialement
VLA42
Bonjour Vla42, je suis entrain de faire egalement un site sur xwebdesignor et je souhaiterai mettre en place egalement ce genre de systeme d'authentification (identifiant et mdt) pour utilisateurs. Merci de me dire si tu as reussi et comment.

bien à toi

Vincan
Messages postés
2
Date d'inscription
mardi 5 janvier 2010
Statut
Membre
Dernière intervention
6 janvier 2010

bonjour moi je cherche a securiser ma page tout simplement mais quoi que je tape elle m affiche toujour la page
voici mon code:

<html>
<head>
<title>securité</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<?php
echo "acces aux informations des locaux techniques :";
?>
<?
$utilisateur = "toto"; // Votre nom d'utilisateur
$mot_de_passe = "tata"; // Votre mot de passe

if (isset($_POST['login']) && isset($_POST['pass']))
{
}
else
{
$_POST['login'] = "";
$_POST['pass'] = "";
}

if ($_POST['login'] == "$utilisateur" && ($_POST['pass'] == "$mot_de_passe")) // Si le nom d'utilisateur et le mot de passe sont correct
{
?>

<center><form action="/base_lt/index/tom/base-lt/index.php" method="post">
Utilisateur:<br><input type="text" name="login" /><br>
Mot de passe:<br><input type="password" name="pass" /><br>
<input type="submit" value="entrée" />
</form></center>

<?
}
if
{
if ($_POST['login'] != "" || ($_POST['pass'] != "")) // Si le nom d'utilisateur ou le mot de passe est incorrect
{
?>
<center><font color="red">Mauvais mot de passe ou mauvais nom d'utilisateur!</font></center>
<?
}
?>
<?
}
?>
</body>
</html>
Messages postés
2
Date d'inscription
mardi 5 janvier 2010
Statut
Membre
Dernière intervention
6 janvier 2010

c bn j ai trouver
mais mnt je cherche a faire une liste deroulante avec le information prise dans ma base de donnee! mais le proble c est ke quand je regarde les autre forum il faut que je mette un while mysql query...array alor que mon code tourne bien avec if... object comment dois je faire?
voici mon code



<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<title>Gestion des locaux techniques</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>

<h1>Gestion des locaux techniques :</h1>
<br>
<h2>Rechercher un local techique :</h2>

<?php
//connection au serveur:
$cnx = mysql_connect( "localhost", "root", "" ) ;

//sélection de la base de données:
$db = mysql_select_db( "base_lt" ) ;


//requête SQL:
$sql = "SELECT *
FROM info_lt
WHERE id " ;

//exécution de la requête:
$requete = mysql_query( $sql, $cnx ) ;

//affichage des données:
if( $result = mysql_fetch_object( $requete ) )
{
$site=$donnees['site'];
?>
<br>
<form name="recherche" action="recherche_lt_base.php" method="POST">
<input type="hidden" name="id" value="<?php echo($id) ;?>">
Site :<input type="text" name="site" value="<?php echo($result->site) ;?>"></br>
Local Technique :<input type="text" name="nom_lt" value="<?php echo($result->nom_lt) ;?>"></br></br>
<td colspan="2"><input type="submit" value="Rechercher"></br>
</form>
<br>
<h2>Afficher tous les locaux d'un site :</h2>
<br>
<form name="recherche" action="affiche_lt_site.php" method="POST">
<input type="hidden" name="id" value="<?php echo($id) ;?>">
Site :
<select name="choix">
<option type="choix" name="site" value="<?php echo($donnees->site) ?> <?php echo $site ?>"></option>
</select></br></br>
<td colspan="2"><input type="submit" value="Afficher"></br>
</form>
<?php
}//fin if
?>
<br>
<a href="table_info_lt.php">Afficher tous les Locaux</a><br />
<br>
<a href="ajout_lt.php">Ajouter un lt</a><br />
<a href="suppression_selection_lt.php">Supprimer un lt</a><br />
<br>
<a href="../index.php">Retour au Menu Principal</a><br />
<br>
</body>
</html>
Messages postés
50
Date d'inscription
lundi 13 octobre 2003
Statut
Membre
Dernière intervention
29 juillet 2020
1
salut ptit suisse, j'ai été voir le site php débutant mais il faut préalablement avoir créé une base de donnée avec login et mot de passe pour utiliser les sessions.
Est ce corrrect ou y a t-il un autre moyen ?
Messages postés
73
Date d'inscription
jeudi 21 décembre 2006
Statut
Membre
Dernière intervention
5 mai 2010
45
Il vaut mieux en effet stocker les données dans une bdd avec le mot de passe en PASSWORD.

Lorsque le membre se connecte, tu interroges la bdd pour voir si un résultat existe.

Si ce n'est pas le cas, alors affichage d'un message d'erreur.
Si c'est le cas, tu stockes par exemple le pseudo dans une variable de SESSION. Pour les pages à accès restreint, il te suffit ensuite de tester la présence de cette variable de session.
Tu devrais utilisé MD5 au lieu de PASSWORD, il est un peu moins connu et même plus efficace.

Persnnellement, j'ai fait une page d'Administration sécurisée par PHP et c'est quasi inviolable et sans BDD ^^.

EN GROS, je récupère le login et mot de passe tapé, je hashe en md5 plusieurs fois le mot de passe et le compare avec le hash du bon mot de passe contenu dans la source, si ça correspond c'est que le mot de passe initial est correct et j'autorise l'accès.

Donc le code en partie:

if (!empty($_POST['password']))
{
$pass = htmlentities($_POST['password'], ENT_QUOTES);
$pass = md5(md5(md5($pass)));
}

if (isset($pass) AND $pass = $hash) //Il faudra évidemment déclarer $hash avant ^^
{
echo 'Page Protégée';
}
else
{
echo 'Formulaire';
}

Bon evidemment le mien est un peu plus élaboré, je n,'ai authorisé que deux essais, sinon il enregistre l'IP dans un doc txt, et si l'IP est dans ce fameux doc txt, le formulaire ne s'affiche plus :D Et y'a un gentil message de Vous avez dépassé le nombre de tentatives autorisées.

Mais je pense que ça suffira...
Messages postés
228
Date d'inscription
jeudi 29 mai 2008
Statut
Membre
Dernière intervention
1 juillet 2011
4
Bonjour ,
Voila j'ai une base de donnees acess comportant une table qui contient les champs:Nom et Prenom et Mot_de_passe.
Je voudrais faire un petit formulaire d'identification qui une fois valider dirige l'utilisateur faire un site.Pour l'identification je voudrai comparer ce que l'utilisateur rentre comme Nom Prenom ert mdp avec le contenu de ma bdd acess, si les champs sont identique alors je le redirige vers mon site sinon ecrire erreur d'identification.
J'ai tres bien etablie la connexion avec ma BDD acess (avec l'obdc et tt sa) mais je ne sais pas comment faire pour comparer les saisies de l'utilisateur avec les donnees de ma bases de donnees.
Voila si quelqu'un pourrait m'aider je le remercie d'avance.
bonjour shreek69,

//////////////// le formulaire.html

<html>
<head>
<title>Connexion au site</title>
</head>
<body>
<form method="post" action="acces.php">
<table border="0" width="400" align="center">
<tr>
<td width="200"><b>Vôtre nom</b></td>
<td width="200">
<input type="text" name="nom">
</td>
</tr>
<tr>
<td width="200"><b>Vôtre prenom</b></td>
<td width="200">
<input type="text" name="prenom">
</td>.
</tr>
<tr>
<td width="200"><b>Vôtre mot de passe<b></td>
<td width="200">
<input type="password" name="password">
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" name="submit" value="login">
</td>
</tr>
</table>
</form>
</body>
</html>

/////////////////////////// la page acces.php



<?php
// On démarre la session
session_start();
$loginOK = false; // cf Astuce

// On n'effectue les traitement qu'à la condition que
// les informations aient été effectivement postées
if ( isset($_POST) && (!empty($_POST['nom'])) && (!empty($_POST['prenom'])) && (!empty($_POST['password'])) ) {



//connection a la bese de données
$link = mysql_connect('localhost', 'root', '') or die('impossible de se connecter à la base de données');
if($link)
$db = mysql_select_db("nom_de_la_base", $link) or die('impossible d\'accéder à la base de données');





extract($_POST); // pour creer $nom, $prenom, $password

// On va chercher le mot de passe dans (user) la table qui contient les informations
$sql = "SELECT nom, prenom, mdp FROM user WHERE nom = '".addslashes($nom)."' and prenom = '".addslashes($prenom)."'";
$req = mysql_query($sql) or die('Erreur SQL : <br />'.$sql);

// On vérifie que l'utilisateur existe bien
if (mysql_num_rows($req) > 0) {

while ($donnees = mysql_fetch_array($req)) // On fait une boucle pour lister les résultats dans le cas ou ilya
// deux personne qui ont le mm nom et le mm prenom et des mdp differentes
{
// On vérifie que son mot de passe est correct
if ($password == $donnees ['Mot_de_passe']) {
$loginOK = true;
}
}
}

// Si le login a été validé on met les données en sessions
if ($loginOK) {
echo "identification reussite";
sleep(3);

header('Location: mon_Site.com'); //tu doit présiser la page ou on doit etre rediriger
}
else {
echo 'Une erreur est survenue, veuillez réessayer !';
}
?>


tu doit changer nom_de_la_base, user, mon_Site.com par tes propres informations
bonne contuniation
Messages postés
228
Date d'inscription
jeudi 29 mai 2008
Statut
Membre
Dernière intervention
1 juillet 2011
4 > anis
OK merci Anis c'est pafait
Jve tester tout sa cio
> anis
je suis debutant en la matiere et je cherche a creer une page securisee par mot de passe pour le site que je suis en train de finaliser
est il possible que tu m'aides dans ce sens ou me donner un code en HTML pour le faire avec le details des textes et mots a integrer dans le code pour que cela fonctionne
Un grand merci
salut philou je te conseille d'aller sur ce site http://www.siteduzero.com/tutoriel-3-213128-tp-page-protegee-par-mot-de-passe.html

bonne chance