Créer un espace membre protégé par .htaccess

WRInaute passionné
Bonjour,

Voilà :

Je sais protéger un répertoire par htaccess (c'est pas un exploit, je sais lol).
Je sais créer un espace membre avec base de donnée etc...

Maintenant, pour la première fois, je veux créer un espace membre protégé par .htaccess.

Et là je ne vois pas qu'elles sont les étapes :

Par exemple, les gens s'inscrivent avec quelles informations (email, passe... ?)
J'enregistre les informations d'inscription dans un fichier ou dans une BD ?
Comment je récupère les informations de l'authentification apache ?

Etc...

Bien sur, chaque espace membre est personnalisé, donc les mots de passe doivent l'être aussi.


Merci de me guider dans ma démarche. :D
 
WRInaute passionné
Salut,

Je pense qu'il suffit juste de gérer les couples login/pass dans ton fichier htpasswd.

Le .htaccess sera commun à tous les utilisateurs et contiendra
(Où plutôt httpd.conf si tu travailles sur un répertoire à protéger)

Code:
AuthUserFile /repertoire/de/votre/fichier/.FichierDeMotDePasse
AuthGroupFile /dev/null
AuthName "Accès sécurisé au site CCM"
AuthType Basic

...

Code:
<LIMIT GET POST> Require valid-user </LIMIT>

J'en sais pas plus je n'en fais qu'une utilisation basique.


http://www.commentcamarche.net/apache/apacht.php3
 
WRInaute impliqué
Si tu veux continuer avec une gestion en base de donnée, tu peux aussi gérer l'authentification HTTP par PHP (demander une authentification, récupérer le login de l'utilisateur connecté...).

Sinon il doit aussi exister un mod pour Apache2 qui gère l'authentification d'utilisateurs via une base de donnée.

Sinon à la mano dans un .htpasswd...
 
WRInaute passionné
maddanny a dit:
dorian53 a dit:
Code:
<LIMIT GET POST> Require valid-user </LIMIT>

Il NE FAUT PAS utiliser la balise <LIMIT..>

Un simple "Require valid-user" suffit.

MADdanny


Exact, merci pour l'info.

http://httpd.apache.org/docs/2.0/mod/core.html#limit


Access controls are normally effective for all access methods, and this is the usual desired behavior. In the general case, access control directives should not be placed within a <Limit> section.
 
WRInaute accro
Meeuuuhhh a dit:
Maintenant, pour la première fois, je veux créer un espace membre protégé par .htaccess.

Et là je ne vois pas qu'elles sont les étapes :

Par exemple, les gens s'inscrivent avec quelles informations (email, passe... ?)
J'enregistre les informations d'inscription dans un fichier ou dans une BD ?
Comment je récupère les informations de l'authentification apache ?

Trois solutions:
- tu stockes dans ta base de données, et tu utilises un module Apache qui va interroger cette base pour authentifier les utilisateurs. Ce n'est évidemment possible que si tu as un dédié.
- tu stockes dans ta base de données, et tu génères un fichier .htpasswd à partir de cette base
- tu stockes uniquement et directement dans un fichier .htpasswd

La dernière option est la plus simple, mais ça complique un peu les opérations genre modifier un mot de passe (ou un login), supprimer un login, etc.
La première option est la meilleure parce que c'est la plus souple mais c'est aussi la plus rapide si tu as beaucoup d'utilisateurs (si ta table est correctement indexée bien sûr).

Jacques.
 
WRInaute passionné
Merci pour toutes vos réponses !

Je reviens sur ces deux là en particulier
dorian53 a dit:
Salut,

Je pense qu'il suffit juste de gérer les couples login/pass dans ton fichier htpasswd.

Le .htaccess sera commun à tous les utilisateurs et contiendra
(Où plutôt httpd.conf si tu travailles sur un répertoire à protéger)

Code:
AuthUserFile /repertoire/de/votre/fichier/.FichierDeMotDePasse
AuthGroupFile /dev/null
AuthName "Accès sécurisé au site CCM"
AuthType Basic

...


Code:
<LIMIT GET POST> Require valid-user </LIMIT>

J'en sais pas plus je n'en fais qu'une utilisation basique.


http://www.commentcamarche.net/apache/apacht.php3

Ca ça ne va pas, car l'espace membre doit être personnalisé. Donc ce sont des identifiants différents pour chacun.



jcaron a dit:
Meeuuuhhh a dit:
Maintenant, pour la première fois, je veux créer un espace membre protégé par .htaccess.

Et là je ne vois pas qu'elles sont les étapes :

Par exemple, les gens s'inscrivent avec quelles informations (email, passe... ?)
J'enregistre les informations d'inscription dans un fichier ou dans une BD ?
Comment je récupère les informations de l'authentification apache ?

Trois solutions:
- tu stockes dans ta base de données, et tu utilises un module Apache qui va interroger cette base pour authentifier les utilisateurs. Ce n'est évidemment possible que si tu as un dédié.
- tu stockes dans ta base de données, et tu génères un fichier .htpasswd à partir de cette base
- tu stockes uniquement et directement dans un fichier .htpasswd

La dernière option est la plus simple, mais ça complique un peu les opérations genre modifier un mot de passe (ou un login), supprimer un login, etc.
La première option est la meilleure parce que c'est la plus souple mais c'est aussi la plus rapide si tu as beaucoup d'utilisateurs (si ta table est correctement indexée bien sûr).

Jacques.

Ok, ça ça a l'air d'être bon. Mais je vois pas comment faire.
Le gars s'inscrit, choisi un nom d'utilisateur, un mot de passe etc... j'expédie tout dans la base de donnée. Ok.
Là, je suis obligé de générer un fichier .htpassword, car l'authentification apache ne fonctionne pas depuis la base de donnée, c'est ça ?
Alors là, je ne sais pas comment générer le .htpassword depuis la base de donnée.
Je ne vois pas du tout comment faire pour ça.
 
WRInaute accro
Meeuuuhhh a dit:
dorian53 a dit:
Je pense qu'il suffit juste de gérer les couples login/pass dans ton fichier htpasswd.

Le .htaccess sera commun à tous les utilisateurs et contiendra
(Où plutôt httpd.conf si tu travailles sur un répertoire à protéger)

Code:
AuthUserFile /repertoire/de/votre/fichier/.FichierDeMotDePasse
AuthGroupFile /dev/null
AuthName "Accès sécurisé au site CCM"
AuthType Basic
Code:
<LIMIT GET POST> Require valid-user </LIMIT>

Ca ça ne va pas, car l'espace membre doit être personnalisé. Donc ce sont des identifiants différents pour chacun.

Ben ça fait exactement ça: il te suffit de mettre une ligne pour chaque utilisateur dans ton .htpasswd.

Meeuuuhhh a dit:
jcaron a dit:
- tu stockes dans ta base de données, et tu génères un fichier .htpasswd à partir de cette base

Ok, ça ça a l'air d'être bon. Mais je vois pas comment faire.
Le gars s'inscrit, choisi un nom d'utilisateur, un mot de passe etc... j'expédie tout dans la base de donnée. Ok.
Là, je suis obligé de générer un fichier .htpassword, car l'authentification apache ne fonctionne pas depuis la base de donnée, c'est ça ?
Pas par défaut, mais il y a des modules qui permettent de le faire (mod_auth_quelquechose, probably mod_auth_mysql pour mysql, flemme de vérifier).
Meeuuuhhh a dit:
Alors là, je ne sais pas comment générer le .htpassword depuis la base de donnée.
Je ne vois pas du tout comment faire pour ça.

Ouvrir fichier
select login,pass de latable where login_valide
pour chaque ligne mettre une ligne dans fichier
fermer fichier
mettre fichier à la place du .htpasswd

Trivial, quoi.

Jacques.
 
WRInaute passionné
Ok, je te remercie de ta réponse Jacques.

Pour tout te dire, je ne vois pas ce que c'est que ces "modules". Ca se trouve où ? Ca ressemble à quoi ? Ca s'attrape comment ? On en fait quoi ?
J'ai appris sur le tas, alors question vocabulaire, je suis un peu faiblard.

Je précise à tout hasard que le site sera sur un mutualisé OVH, ça peut avoir de l'importance.

Aussi, quand à la fin tu dis "pour chaque ligne mettre une ligne dans fichier ", c'est à cette étape que le module est censé intervenir, c'est ça ?
 
WRInaute passionné
Meeuuuhhh a dit:
C'est parce que c'est comme ça, j'ai pas trop envie de philosopher, merci ;-)
c'est pas une question de philosophie, c'est juste pour savoir si on peut te proposer un autre systeme ...
Bon ben debrouille toi seul si tu veux pas repondre ...
 
WRInaute passionné
forummp3 a dit:
Meeuuuhhh a dit:
C'est parce que c'est comme ça, j'ai pas trop envie de philosopher, merci ;-)
c'est pas une question de philosophie, c'est juste pour savoir si on peut te proposer un autre systeme ...
Bon ben debrouille toi seul si tu veux pas repondre ...

Non c'est gentil, mais j'ai déjà un autre système sous la main, l'espace membre classique en php, mais là j'ai envie d'essayer avec une authentification apache.
 
WRInaute passionné
Meeuuuhhh a dit:
forummp3 a dit:
Meeuuuhhh a dit:
C'est parce que c'est comme ça, j'ai pas trop envie de philosopher, merci ;-)
c'est pas une question de philosophie, c'est juste pour savoir si on peut te proposer un autre systeme ...
Bon ben debrouille toi seul si tu veux pas repondre ...

Non c'est gentil, mais j'ai déjà un autre système sous la main, l'espace membre classique en php, mais là j'ai envie d'essayer avec une authentification apache.
ben justement, tu n'as pas besoin d'un htacess pour une authentification apache.

tu peux utiliser un code de ce genre:

Code:
<?php
  if(!isset($PHP_AUTH_USER)) {
    Header("WWW-Authenticate: Basic entrer="Entrer dans la page" ");
    Header("HTTP/1.0 401 Unauthorized");
    echo "Vous avez appuyé sur le bouton annuler!!!\n";
    exit;
  } else {
    if ( ($PHP_AUTH_USER == "sebastien") && ( $PHP_AUTH_PW == "azerty" ))
    {
       echo "<html><body>Bienvenue sur cette page réservée aux membres.<P></body></html>";
    }
    else
    { 
       echo "<html><body>Vous n'êtes pas autorisé à visionner cette page.<P></body></html>";
    }
  }
?>
 
WRInaute passionné
Oui ça ressemble à ce que je souhaite, j'ai dû mal m'expliquer donc.

Bon je recommence.

Le gars s'inscrit avec un formulaire d'inscription classique : nom, site internet, email, mot de passe, confirmation du mot de passe, validation de l'email en cliquant sur un lien envoyé à l'adresse indiquée, etc...

Ensuite, pour l'identification, je souhaite que ce soit une fenêtre authentification apache qui apparaissent et que le gars inscrive son courriel et son mot de passe pour avoir accès à son espace membre personnel.

Sinon, il a une erreur 401.


Donc là ton code, forummp3, c'est pour faire ça ?

Si oui, alors je ne vois pas comment appeler la fenêtre d'authentification apache.

Ensuite, je ne vois pas comment récupérer les variables entrées dans la fenêtre.

Après, si les variables correspondent aux informations dans la BD, j'initialise une variable $PHP_AUTH_USER dont je teste la présence en haut de chaque page comme sur ton code, c'est ça ?
 
WRInaute passionné
la fenetre s'apelle avec ce code:

Header("WWW-Authenticate: Basic entrer=\"Entrer dans la page\" ");

quand on voit apparaitre la fenetre, la personne rentre le login et mdp puis ca créé les variable $PHP_AUTH_USER et $PHP_AUTH_PW.
S'il appuye sur le bouton annuler, ca ne renvoyer aucune variable et avec le code ca envoie une erreur 401, tu peux y mettre ce que tu veux.

Ensuite tu personnalise selon tes souhaits.
 
WRInaute passionné
Ok, je vois le truc, mais là je bloque un peu.

Sur la page index, j'ai créer un lien "identification".

Il pointe vers la page membre.php

Tout en haut de la page j'ai affiché cette ligne :
Code:
<?php  Header("WWW-Authenticate: Basic entrer='Entrer dans la page' "); 

if ( ($_POST['PHP_AUTH_USER'] == "test") && ( $_POST['PHP_AUTH_PW'] == "bob" )) 
{

;}

 ?>

Donc là, je clique sur le lien, ça affiche la fenêtre, j'entre "test" et "bob" mais çe fait rien. Vous me direz, y'a rien dans l'instruction lol.

Mais même, je vois pas ce que je dois faire pour afficher la page membre.php si les variables sont les bonnes.
 
WRInaute impliqué
Meeuuuhhh a dit:
Donc là ton code, forummp3, c'est pour faire ça ?
Oui

Meeuuuhhh a dit:
Si oui, alors je ne vois pas comment appeler la fenêtre d'authentification apache.
Ca n'a pas vraiment à voir avec Apache. C'est simplement que le serveur web (donc effectivement Apache, soit simulé via PHP) envoit un en-tête "WWW-Authenticate", les navigateurs savent qu'ils doivent demander un login & mdp à l'utilisateur et envoyer ça encodé en base64...

Meeuuuhhh a dit:
Ensuite, je ne vois pas comment récupérer les variables entrées dans la fenêtre.
C'est dans son script, sauf qu'il code avec les pieds (register_globals = On), donc en fait c'est:
$_SERVER['PHP_AUTH_USER']
et
$_SERVER['PHP_AUTH_PW']
 
WRInaute passionné
Bon alors, j'ai essayé ça :
Code:
<?php
  if(!isset($_SERVER['PHP_AUTH_USER'])) {
    Header("WWW-Authenticate: Basic entrer=\"Entrer dans la page\" ");
    Header("HTTP/1.0 401 Unauthorized");
    echo "Vous avez appuyé sur le bouton annuler!!!\n";
    exit;
  } else {
    if ( ($_SERVER['PHP_AUTH_USER'] == "sebastien") && ( $_SERVER['PHP_AUTH_PW'] == "azerty" ))
    {
       echo "<html><body>Bienvenue sur cette page réservée aux membres.<P></body></html>";
    }
    else
    {
       echo "<html><body>Vous n'êtes pas autorisé à visionner cette page.<P></body></html>";
    }
  } 

?>

Alors, le code ne fonctionne pas. J'entre "sebastien" et "azerty", mais la fenêtre se réaffiche quand même.

Ensuite, je ne comprend pas : si l'authentification réussie, comment est-ce que j'affiche la page ? Je ne vais pas l'afficher dans un echo à l'intérieur de l'instruction. Je fais donc un header avec une redirection ? Et ensuite en haut de la page, il suffit de tester si il y a la variable $_SERVER['PHP_AUTH_USER'], sans aucune valeur attribuée, pour que la page s'affiche ou non ?

Et je transmet les identifiants du membre dans une session c'est ça ?
 
WRInaute passionné
pour moi ce code ca marche.

Sinon, ton code de zone membre, ben tu le met a la place de :

"echo "<html><body>Bienvenue sur cette page réservée aux membres.<P></body></html>"; "
 
WRInaute accro
ce qu'il faut savoir, c'est que tous les serveurs ne renvoient pas PHP_AUTH_USER, pour certains c'est REMOTE_USER et, en plus, la valeur du password n'est souvent pas transmise par le serveur, pour une politique de sécurité.
Donc le plus pratique est de faire la màj du htpasswd directement.
 
WRInaute accro
essaie déjà de voir si tes variables sont bien remplies après ce formulaire.
Donc affiche les toutes.
Avec un print_r($_SERVER) par exemple
 
WRInaute passionné
Bon alors j'ai testé en faisant cela :
<?php
if(!isset($_SERVER['PHP_AUTH_USER'])) {
Header("WWW-Authenticate: Basic entrer=\"Entrer dans la page\" ");
Header("HTTP/1.0 401 Unauthorized");
echo "Vous avez appuyé sur le bouton annuler!!!\n";
exit;
} else {
echo''.$_SERVER['PHP_AUTH_USER'].''.$_SERVER['PHP_AUTH_PW'].'';

}

?>

Mais pareil, la fenêtre d'identification réapparait sans arrêt...
 
WRInaute impliqué
Meeuuuhhh a dit:
Bon alors j'ai testé en faisant cela :
<?php
if(!isset($_SERVER['PHP_AUTH_USER'])) {
header("WWW-Authenticate: Basic entrer="Entrer dans la page" ");
header("HTTP/1.0 401 Unauthorized");
echo "Vous avez appuyé sur le bouton annuler!!!\n";
exit;
} else {
echo''.$_SERVER['PHP_AUTH_USER'].''.$_SERVER['PHP_AUTH_PW'].'';

}

?>

Mais pareil, la fenêtre d'identification réapparait sans arrêt...
Ben tu as un soucis de serveur ou de navigateur. Je viens de tester et ça passe.

Au passage modifie
Code:
header("WWW-Authenticate: Basic entrer="Entrer dans la page" ");
en
Code:
header("WWW-Authenticate: Basic realm="Entrer dans la page"");

Mais je ne pense pas que ça vienne de là...
 
WRInaute passionné
Meeuuuhhh a dit:
Bon j'ai laissé tomber, merci de votre aide.

Je l'ai fais avec un espace membre classique, en php.
tu peux nous donner ton hebergeur pour pas qu'on y aille? parce que si un truc aussi important ne marche pas, c'est pas terrible...
 
WRInaute passionné
C'est ovh.

A part une grosse bavure récente pour laquelle ils se sont excusés, j'ai pas à m'en plaindre. Vous êtes chez qui vous ?
Ceci dit ça vient surement plus de moi que de l'hébergeur.


Par contre dès que possible je vais installer mes sites aux Etats-Unis ou en Russie, parce que question liberté de penser ça devient particulièrement oppressant l'UE. Mais c'est une autre histoire.
 
WRInaute passionné
Meeuuuhhh a dit:
C'est ovh.

A part une grosse bavure récente pour laquelle ils se sont excusés, j'ai pas à m'en plaindre. Vous êtes chez qui vous ?
Ceci dit ça vient surement plus de moi que de l'hébergeur.


Par contre dès que possible je vais installer mes sites aux Etats-Unis ou en Russie, parce que question liberté de penser ça devient particulièrement oppressant l'UE. Mais c'est une autre histoire.
demenager les serveurs ne servent a rien, faut que tu demenage aussi, sinon il est simple a la police francaise de venir t'arreter en cas de probleme.
 
WRInaute accro
forummp3 a dit:
Meeuuuhhh a dit:
Je l'ai fais avec un espace membre classique, en php.
tu peux nous donner ton hebergeur pour pas qu'on y aille?
effectivement sur OVH en mutualisé ça ne fonctionne pas, tout comme ne fonctionne pas la récupération du password dans la variable $_SERVER après une authentification apache.
Par contre, sur un dédié OVH cela fonctionne bien.
 
WRInaute passionné
Leonick a dit:
forummp3 a dit:
Meeuuuhhh a dit:
Je l'ai fais avec un espace membre classique, en php.
tu peux nous donner ton hebergeur pour pas qu'on y aille?
effectivement sur OVH en mutualisé ça ne fonctionne pas, tout comme ne fonctionne pas la récupération du password dans la variable $_SERVER après une authentification apache.
Par contre, sur un dédié OVH cela fonctionne bien.

J'aurais dû le préciser dès le début. :oops:
A votre avis, pourquoi ça ne fonctionne pas chez eux ? Pour des raisons de sécurité ? Parce que ce sont pas des amateurs quand même.

forummp3 a dit:
Meeuuuhhh a dit:
C'est ovh.

A part une grosse bavure récente pour laquelle ils se sont excusés, j'ai pas à m'en plaindre. Vous êtes chez qui vous ?
Ceci dit ça vient surement plus de moi que de l'hébergeur.


Par contre dès que possible je vais installer mes sites aux Etats-Unis ou en Russie, parce que question liberté de penser ça devient particulièrement oppressant l'UE. Mais c'est une autre histoire.
demenager les serveurs ne servent a rien, faut que tu demenage aussi, sinon il est simple a la police francaise de venir t'arreter en cas de probleme.
Ouais en effet, il peuvent pas faire fermer les sites hébergés aux USA mais ils peuvent venir chercher celui qui pense pas comme leurs lois l'imposent.

Bon bah comme c'est prévu aussi, ils auront ni le beurre, ni l'argent du beurre. lol

Et encore merci pour vos réponses, soit dit en passant.
 
WRInaute passionné
Bon j'ai complètement zappé le problème en fait lol

Merci pour le lien léonick, par contre je vais pas tester juste pour le fun, j'ai trop de boulot.

Encore merci à tous.
 
Discussions similaires
Haut