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's
www.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.
Je suis assez confiant ma question n'a pas de solution http://stackoverflow.com/a/9561335/654789 – puk