![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 68 Pomógł: 0 Dołączył: 8.08.2010 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Zaczynam zabawę z websocketami których będę musiał użyć w swoim projekcie. Aktualnie zacząłem naukę od prostego chatu w czasie rzeczywistym. Z samymi websocketami sobie poradziłem, zarówno klient jak i serwer działają prawidłowo, nawiązuje się połączenie a wiadomości na czacie wyświetlają się pozostałym użytkownikom błyskawicznie. Mam jednak problem a w zasadzie brak pomysłu na to w jaki sposób mogę weryfikować użytkowników. Każdy użytkownik loguje się na stronie swoim loginem i hasłem i tworzona jest przez php zwykła sesja. Mam więc kilka pytań. W jaki sposób zrealizować po stronie serwera weryfikację czy wiadomość która dotarła od użytkownika XXX na pewno pochodzi od użytkownika zalogowanego? W jaki sposób weryfikować jego sesję utworzoną przez zwykłe $_SESSION['login'] ? W jaki sposób zablokować możliwość łączenia się z serwerem websocketów z domen innych niż moja i uniemożliwić podszywanie się pod zalogowanych użytkowników? Nie pytałbym gdybym wcześniej nie szukał. Z góry dziekuję. |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Cytat W jaki sposób zrealizować po stronie serwera weryfikację czy wiadomość która dotarła od użytkownika XXX na pewno pochodzi od użytkownika zalogowanego? via cookie - tak jak w obrębie całej aplikacji Cytat W jaki sposób weryfikować jego sesję utworzoną przez zwykłe $_SESSION['login'] ? Trzymanie sesji użytkownika gdzieś, gdzie będą twoje webosokety miały dostęp - np redis, memcached, mongo, mysal etc. Cytat W jaki sposób zablokować możliwość łączenia się z serwerem websocketów z domen innych niż moja i uniemożliwić podszywanie się pod zalogowanych użytkowników? Przy połączeniu sprawdzać sesje, jeżeli nie będzie się zgadzać, to rozłączyć połączenie. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 268 Pomógł: 254 Dołączył: 11.06.2009 Skąd: Świętochłowice Ostrzeżenie: (0%) ![]() ![]() |
Może to coś pomoże - nie jest to wprawdzie ogólnie o websocketach, a o konkretnym libie, ale IMO da się wyciągnąć z tego sporo: http://faye.jcoglan.com/security.html
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 68 Pomógł: 0 Dołączył: 8.08.2010 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
by_ikar - czy dobrze Cię rozumiem?
Zamiast generować sesję w php za pomocą $_SESSION['login'] mam generować sobie podczas logowania np. jakiś klucz sesji składający się z losowego ciągu i przetrzymywać go w cookie oraz np. w bazie mysql razem z kontami użytkowników. Następnie gdy użytkownik wejdzie na czat wysyłać websocketem do serwera klucz sesji, a następnie serwer powinien sprawdzić czy przesłany klucz sesji istnieje w bazie i na tej podstawie stwierdzać czy dany użytkownik jest zalogowany? Czy takie wysyłanie klucza plaintextem do serwera nie jest zbytnio niebezpieczne? Comandeer - dzięki, zapoznam się ale raczej na początku szukam sposobu na rozwiązanie problemu bez dodatkowych bibliotek i mało cudzych linijek kodu. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Sesja php jest tworzona po stronie serwera a użytkownikowi zostaje utworzone cookie, w którym znajduje się ID sesji. W przypadku domyślnych ustawień, ów ID sesji nie jest niczym innym jak nazwą pliku z zserializowaną tablicą. I chciałbyś uwierzytelnić użytkownika, gdyby sockety miały dostęp do tej sesji z php, którą też mógłbyś sobie deserializować, to wtedy wiedziałbyś czy dany użytkownik jest danym użytkownikiem. Po prostu musisz jakoś współdzielić tą sesje, bo do tego cookie z ID sesji serwer z websocketami będzie miał dostęp, o ile są w tym samym hoście. Jak nie, to musisz utworzyć takie cookie też dla tego hosta gdzie jest serwer websocketów. Jak współdzielić taką sesje ? Sposobów jest wiele. Handler sesji w php może być "nadpisany" poprzez sterowniki różnego rodzaju. Np sterownik redisa, czy memcached, zawsze możesz też napisać jakiś swój własny handler, albo próbować dobrać się do plików sesyjnych tworzonych domyślnie przez php.
Czy to jest bezpieczne? Jeżeli się obawiasz o bezpieczeństwo użyj httpsa, wtedy cała komunikacja będzie szyfrowana. Jeżeli nie chcesz używać httpsa, wciąż jest to w dość bezpieczne (na tym forum nie ma https, a ID sesji leci nie szyfrowane w ciasteczkach). |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 3 Dołączył: 19.11.2013 Skąd: Białystok Ostrzeżenie: (0%) ![]() ![]() |
poczytaj o JWT
https://stormpath.com/blog/token-auth-spa/ implementacja w php: http://www.sitepoint.com/php-authorization...son-web-tokens/ |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 09:09 |