2011-11-07 3 views
7

Comment une fonction de connexion peut-elle être conçue pour utiliser les autorisations de fichiers suPHP? Par exemple, si j'ai un site Web au www.example.com et les deux utilisateurs suivants avec leurs propres répertoires personnels, chacun avec un script PHP test.php, et un script validateUser.php qui appartient à un autre utilisateur (root, www-data, apache ...) dans le répertoire /home.Implémentation de la connexion aux côtés de suPHP

 
/home/ 
├── validateUser.php 
├── user1 
│   └── test.php 
└── user2 
    └── test.php 

user1 peut accéder en vous rendant le script user2'swww.example.com/user2/test.php, et vice versa. Au lieu de ce que je veux, est de canaliser toutes les demandes entrantes, en utilisant quelque chose comme mod_rewrite, à validateUser.php. Cependant, cela aura pour conséquence d'exécuter tous les scripts en tant que propriétaire de validateUser.php, et non du script cible test.php. Y a-t-il un moyen d'appeler un script php avant que suPHP ne démarre, puis autoriser suPHP à continuer ou à abandonner complètement?


EDIT C'est la deuxième prime Je élève. Le premier que j'ai donné à Gustav b/c il a donné une bonne partial answer. Je vais mentionner ce que j'ai essayé jusqu'ici, et pourquoi aucun d'eux ne fonctionne pour moi.

1) J'ai essayé d'utiliser mod_rewrite pour rediriger l'URL vers validateUser.php pour consigner l'utilisateur ou pour appeler le script qu'il voulait appeler. Le problème est que j'ai défini mes hôtes virtuels de telle sorte que chaque utilisateur ait son propre site virtuel (par exemple, www.user1.example.com, www.user2.example.com ... si c'est une mauvaise approche de conception, n'hésitez pas à le signaler grossièrement). Par conséquent, bien que le système d'exploitation voit la structure de fichier comme ci-dessus, en ligne, les répertoires racine sont mis en place en tant que tels

VirtualHost = www.user1.example.com 
├── validateUser.php 
└── test.php 
VirtualHost = www.user2.example.com 
├── validateUser.php 
└── test.php 

Naturellement je viens de déplacer une copie de validateUser.php dans le répertoire de chaque utilisateur. Le problème est que maintenant l'utilisateur peut supprimer ce fichier et y mettre tout ce qu'il veut, comme ne pas avoir besoin de se connecter du tout. Un moyen de contourner cela est de rendre le dossier de base collant (pas quelque chose que je ne recommanderais jamais à faire dans un dossier personnel) et de faire le validateUser.php détenue par root. Mais maintenant, il sera exécuté en tant que root puisque c'est suPHP. C'est là que j'ai abandonné.

2) Je pourrais utiliser la suggestion mod_auth de Gustav, mais je n'aime pas qu'il exige le mot de passe à l'avance (comme les sites Web old school).

3) J'ai considéré une variante à 1) si je pouvais rediriger entre des hôtes virtuels. Par exemple, restructurer les hôtes virtuels comme si

VirtualHost = www.user1.example.com 
└── test.php 
VirtualHost = www.user2.example.com 
└── test.php 
VirtualHost = www.admin.example.com 
└── validateUser.php 

Ensuite, utilisez mod_rewrite pour rediriger tout le trafic des utilisateurs à www.admin.example.com/validateUser.php, et si l'utilisateur est connecté (ou si la connexion est réussie), l'utilisateur est redirigé vers la site qu'ils ont d'abord essayé de se connecter. L'avantage de ceci, si cela est même possible, est que suPHP ne se lancera pas avant que l'utilisateur ne soit redirigé vers son propre hôte virtuel.

+0

Je suis assez confiant ma question n'a pas de solution http://stackoverflow.com/a/9561335/654789 – puk

Répondre

2

Avez-vous envisagé de mettre en œuvre l'authentification de l'utilisateur en utilisant mod_auth? Si vous décidez de l'essayer, il y a un guide que vous pouvez trouver utile.

L'Apache 2.2 équivalents:

Notez que le navigateur stocke les informations d'identification, et les envoie dans l'en-tête avec toutes les demandes que vous faites.

+0

Je ne suis pas sûr si c'est ce que je cherche, en tout cas, il semble être arrêté "Compatibilité: disponible uniquement dans les versions antérieures à 2.1" – puk

+0

C'est uniquement parce qu'il a été remplacé par des modules un peu plus spécifiques, comme [mod_auth_basic] (http://httpd.apache.org/docs/2.2/mod/mod_auth_basic.html). Si ce n'est pas ce que vous cherchez, alors pas de soucis, juste pensé que cela pourrait aider. –

+0

permettez-moi d'avoir un autre regard. – puk

Questions connexes