2011-11-07 19 views
7

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.

+0

Jestem przekonany, że moje pytanie nie ma rozwiązania http://stackoverflow.com/a/9561335/654789 – puk

Odpowiedz

2

Czy rozważałeś wprowadzenie uwierzytelniania użytkownika przy użyciu numeru mod_auth? Jeśli zdecydujesz się go wypróbować, możesz skorzystać z guide, który może Ci się przydać.

Apache 2.2 równoważniki:

Należy zauważyć, że przeglądarka przechowuje poświadczenia, i wysyła je w nagłówku z każdego żądania można dokonać.

+0

Nie jestem zbyt pewny, czy tego właśnie szukam, w każdym razie wydaje się, że został przerwany "Kompatybilność: dostępna tylko w wersjach wcześniejszych niż 2.1" – puk

+0

To tylko dlatego, że została zastąpiona nieco bardziej specyficznymi modułami, takimi jak [mod_auth_basic] (http://httpd.apache.org/docs/2.2/mod/mod_auth_basic.html). Jeśli nie to, czego szukasz, to nie martw się, tylko pomyśl, że to może pomóc. –

+0

pozwól mi spojrzeć jeszcze raz. – puk

Powiązane problemy