![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 890 Pomógł: 339 Dołączył: 14.12.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Witam,
mam do rozwiązania pewien problem, krótko opiszę o co chodzi: - mam 3 serwisy pod 3 różnymi domenami: s1.pl, s2.pl, s3.pl - czas zalogowania na różnych serwisach ma być różny (np. 6h, 12h, 1h - dwa serwisy z newsami i jeden aukcyjny) - wszystkie serwisy stoją na jednym serwerze, na tym samym koncie (nawet pliki silnika są te same, ale to chyba żadna różnica) - serwisy korzystają z jednej bazy danych, ale pobierają po prostu różne informacje - system logowania każdego serwisu na sesjach (id sesji w cookies) - systemy będą do siebie wzajemnie linkowały (np. przekazując w ten sposób id sesji) Problem: jak zrobić, żeby zalogowanie na jednym z serwisów logowało na pozostałe? - system sesji PHP zapisuje dane na plikach, czyli teoretycznie przekazanie id sesji w linku załatwiłoby sprawę? Czy istnieje jeszcze podział sesji na domeny? (konto hostingowe jest to samo) - cookies są niezależne dla każdej domeny, to oczywiste Mój pomysł: (np. linkujemy s1 -> s2) - przekazywanie w linku id sesji - na s2 robimy session_regenerate_id() (ew. kopiujemy dane zapisane w sesji) i ustawiamy inny czas życia sesji (wymóg) - dzięki temu ustawią się niezależne cookies dla każdego serwisu - id sesji muszą być zapisane w bazie (taki kolejny wymóg), więc z wylogowaniem ze wszystkich serwisów jednocześnie też nie będzie problemu Moje pytanie brzmi: - jak to się ma do bezpieczeństwa? - czy moje myślenie dąży w dobrą stronę? - czy w ogóle jest to wykonalne biorąc pod uwagę kwestie zabezpieczeń serwera/przeglądarek? Z góry dzięki za wszystkie sugestie. Ten post edytował sowiq 13.02.2009, 12:36:26 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat Czy istnieje jeszcze podział sesji na domeny? (konto hostingowe jest to samo) - cookies są niezależne dla każdej domeny, to oczywiste Sobie odpowiedziałeś. ![]() Cytat - jak to się ma do bezpieczeństwa? Hmm, ciężko powiedzieć, gdyż istnieje łatwy sposób na session hijacking. Cytat - czy moje myślenie dąży w dobrą stronę? Zależy, co tak naprawdę chcesz osiągnąć. Proponowałbym token w URL, niezależny od ID sesji. -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 890 Pomógł: 339 Dołączył: 14.12.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Zależy, co tak naprawdę chcesz osiągnąć. Napisałem co chcę osiągnąć. Chcę, aby po zalogowaniu w jednym serwisie i przejściu do drugiego user był zalogowany i tam. Nie byłoby to możliwe, gdyby serwisy były na różnych serwerach, ale u mnie są i to na jednym koncie. Dlatego zastanawiam się, czy sesje też nie będą te same (jedyna różnica to nazwa domeny - te same pliki, ten sam serwer, ten sam właściciel plików i folder domowy).Proponowałbym token w URL, niezależny od ID sesji. To jeszcze lepsze od ID sesji. Jak ktoś przechwyci tokena, to bez niczego będzie zalogowany. A w sesji mam przynajmniej zapisany adres IP zalogowanego usera.
Ten post edytował sowiq 13.02.2009, 17:17:22 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat Dlatego zastanawiam się, czy sesje też nie będą te same (jedyna różnica to nazwa domeny - te same pliki, ten sam serwer, ten sam właściciel plików i folder domowy). A nie lepiej byłoby dać wspólne konto, tylko wymaganie zalogowania do każdego z serwisów...? Rozmawiamy przecież i o bezpieczeństwie... Cytat To jeszcze lepsze od ID sesji. Jak ktoś przechwyci tokena, to bez niczego będzie zalogowany. A w sesji mam przynajmniej zapisany adres IP zalogowanego usera. Źle mnie zrozumiałeś. ![]() -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 890 Pomógł: 339 Dołączył: 14.12.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Ok, może nie wyraziłem się zbyt jasno. Jak napisałem na początku - baza danych jest wspólna dla każdego serwisu. Wspólna jest tabela z użytkownikami, jest ten sam system logowania (te same pliki!).
Cytat Żeby był zalogowany, token musi najpierw istnieć. Sorry, ale najpierw piszesz o session hijacking, a potem wypisujesz takie rzeczy. Czym w takim razie wg. Ciebie taki generowany token będzie się różnił od SID'a?Cytat A nie lepiej byłoby dać wspólne konto, tylko wymaganie zalogowania do każdego z serwisów Jeśli byłoby lepiej, to nie zakładałbym tematu. A konto jest wspólne, co napisałem powyżej. W pierwszym poście napisałem, że chcę zrobić tak, że po zalogowaniu do jednego serwisu, użytkownik był zalogowany na pozostałych 2. To jest moje pytanie, więc nie pisz mi proszę, że mogę logować usera 3 razy, bo doskonale o tym wiem. Ten post edytował sowiq 13.02.2009, 20:24:53 |
|
|
![]()
Post
#6
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat Czym w takim razie wg. Ciebie taki generowany token będzie się różnił od SID'a? Tym, że za każdym żądaniem jest on inny? (może być wykorzystany tylko raz) Można by to było zrealizować w mniej więcej ten sposób: Logując się na jednej stronie wstawiasz do bazy token (np. tabela memory z połączonym SID-em). Skrypty logujące do innych domen są wywoływane jak obrazki (AJAX nie wchodzi w rachubę ze względu na ograniczenia). I teraz sytuacja ma się następująco: Kod <img src="http://server1.pl/signin.php?sid=d97h78d87g6b876d&token=873982384" /> <img src="http://server1.pl/signin.php?sid=d97h78d87g6b876d&token=873982384" /> Jeśli token się zgadza, signin.php ustawia ciasteczko, user jest zalogowany. Jeśli się nie zgadza - nie robi nic/generuje inny SID. Oczywiście, wszystkie domeny korzystają z tej samej tabeli z tokenami, GC zrealizujesz sobie już chyba sam. ![]() -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 890 Pomógł: 339 Dołączył: 14.12.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
I to jest bardzo dobra odpowiedź
![]() Zastanawia mnie jedno tylko. Sesje zapisywane są w jakimś katalogu tmp, najprawdopodobniej jest to inny katalog dla każdego użytkownika serwera (czyli dla każdego konta hostingowego). Czyli teoretycznie logując się na s1 wystarczyłoby tylko raz ustawić cookie na s2 i s3 o takiej samej nazwie jak nazwa sesji. Dzięki takiemu rozwiązaniu mógłbym 'współdzielić' jedną sesję w ramach 3 różnych domen. Tylko pytanie czy PHP rozróżnia w jakiej domenie jest ustawiona dana sesja? Czy po prostu w ramach jednego konta hostingowego wszystkie sesje są dostępne pod różnymi domenami? |
|
|
![]()
Post
#8
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat Czyli teoretycznie logując się na s1 wystarczyłoby tylko raz ustawić cookie na s2 i s3 o takiej samej nazwie jak nazwa sesji. Dzięki takiemu rozwiązaniu mógłbym 'współdzielić' jedną sesję w ramach 3 różnych domen. Tak. Cytat Tylko pytanie czy PHP rozróżnia w jakiej domenie jest ustawiona dana sesja? Czy po prostu w ramach jednego konta hostingowego wszystkie sesje są dostępne pod różnymi domenami? Nie rozróżnia. Jeśli chodzi o drugie pytanie - lepiej ustaw katalog na sesje gdzieś na Twoim koncie, będzie bezpieczniej. ![]() -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 1 890 Pomógł: 339 Dołączył: 14.12.2006 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Ok, dzięki wielkie za pomoc i zainteresowanie tematem jako jedyna osoba.
Będę raportował o ew. dalszych wątpliwościach i napotkanych problemach. Pozdrawiam. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 2.07.2025 - 03:33 |