Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> 3 domeny, 1 serwer, wspólne logowanie, konieczność logowania do 3 serwisów za jednym razem
sowiq
post 13.02.2009, 12:36:00
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
Go to the top of the page
+Quote Post
erix
post 13.02.2009, 16:54:51
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ś. winksmiley.jpg

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!
Go to the top of the page
+Quote Post
sowiq
post 13.02.2009, 17:15:31
Post #3





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Cytat(erix @ 13.02.2009, 16:54:51 ) *
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).
Cytat(erix @ 13.02.2009, 16:54:51 ) *
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
Go to the top of the page
+Quote Post
erix
post 13.02.2009, 18:02:07
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ś. winksmiley.jpg Żeby był zalogowany, token musi najpierw istnieć. Oprócz samego SID-a sprawdzany byłby również i token.


--------------------

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!
Go to the top of the page
+Quote Post
sowiq
post 13.02.2009, 20:13:19
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
Go to the top of the page
+Quote Post
erix
post 13.02.2009, 22:03:57
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&amp;token=873982384" />
<img src="http://server1.pl/signin.php?sid=d97h78d87g6b876d&amp;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. winksmiley.jpg


--------------------

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!
Go to the top of the page
+Quote Post
sowiq
post 13.02.2009, 22:32:23
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ź smile.gif Podoba mi się ten pomysł.

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?
Go to the top of the page
+Quote Post
erix
post 13.02.2009, 22:37:21
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. winksmiley.jpg


--------------------

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!
Go to the top of the page
+Quote Post
sowiq
post 13.02.2009, 22:47:49
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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 2.07.2025 - 03:33