W jaki sposób można zaprojektować funkcję logowania tak, aby korzystała z uprawnień pliku suPHP. Na przykład, jeśli mam witrynę pod adresem www.example.com
i dwóch następujących użytkowników z ich własnymi katalogami domowymi, każdy ze skryptem php test.php
i skryptem validateUser.php
należącym do innego użytkownika (root, www-data, apache ...) w katalog /home
.Implementacja logowania wraz z suPHP
/home/ ├── validateUser.php ├── user1 │ └── test.php └── user2 └── test.php
user1
mogą uzyskać dostęp user2's
skrypt odwiedzając www.example.com/user2/test.php
, i vice versa. Zamiast tego, czego chcę, to kierować wszystkimi przychodzącymi żądaniami, używając czegoś takiego jak mod_rewrite, do validateUser.php
. Jednak spowoduje to wykonanie wszystkich skryptów jako właściciela skryptu validateUser.php
, a nie docelowego test.php
.
Czy jest jakiś sposób, aby zadzwonić do skryptu php, zanim zacznie działać suPHP, a następnie albo zezwolić na kontynuowanie suPHP, albo przerwać całkowicie.
EDIT Jest to druga nagroda kładę się. Pierwszy podarowałem Gustavowi b/c, który dał dobry partial answer. Wspomnę o tym, co dotychczas próbowałem i dlaczego żaden z nich nie działa dla mnie.
1) Próbowałem użyć mod_rewrite do przekierowania adresu URL do validateUser.php
w celu zalogowania użytkownika lub wywołania dowolnego skryptu, który chciał wywołać. Problem polega na tym, że ustawiłem swoje wirtualne hosty tak, aby każdy użytkownik miał swoją własną stronę wirtualną (np. www.user1.example.com
, www.user2.example.com
... jeśli jest to złe podejście do projektowania, nie krępuj się, aby ją niegrzecznie wskazać). Dlatego, chociaż OS widzi strukturę plików jak powyżej, w Internecie, katalogi korzenia są skonfigurowane jako taki
VirtualHost = www.user1.example.com
├── validateUser.php
└── test.php
VirtualHost = www.user2.example.com
├── validateUser.php
└── test.php
Naturalnie ja po prostu przeniósł kopię validateUser.php
do katalogu każdego użytkownika. Problem polega na tym, że teraz użytkownik może usunąć ten plik i umieścić tam, gdzie chce, np. Nie wymagać logowania w ogóle. Sposób obejścia tego sprawia, że folder domowy jest lepki (nie jest to coś, co polecałabym kiedykolwiek zrobić w katalogu domowym) i sprawił, że validateUser.php
byłby własnością root. Ale teraz wykona AS root, ponieważ jest to suPHP. Tam się poddałem.
2) Mogę skorzystać z sugestii Gustava mod_auth
, ale nie podoba mi się to, że wymaga hasła z góry (jak na starych stronach internetowych szkół).
3) Rozważałem wariant 1), gdybym mógł przekierować między wirtualnymi hostami. Na przykład, restrukturyzacji wirtualne hosty jak tak
VirtualHost = www.user1.example.com
└── test.php
VirtualHost = www.user2.example.com
└── test.php
VirtualHost = www.admin.example.com
└── validateUser.php
Następnie za pomocą mod_rewrite przekierować cały ruch z użytkowników www.admin.example.com/validateUser.php
, a jeśli użytkownik jest zalogowany jako gość (lub jeśli logowanie się powiedzie) użytkownik zostaje przekierowany z powrotem do Strona, na którą początkowo próbowali się zalogować. Zaletą tego, jeśli nawet jest to możliwe, jest to, że suPHP nie zacznie działać, dopóki użytkownik nie zostanie skierowany z powrotem do swojego wirtualnego hosta.
Jestem przekonany, że moje pytanie nie ma rozwiązania http://stackoverflow.com/a/9561335/654789 – puk