Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [php] Logowanie sesje i cookies, Czy tak sie da ?
RubiX
post
Post #1





Grupa: Zarejestrowani
Postów: 162
Pomógł: 6
Dołączył: 14.02.2007
Skąd: Poznań

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


Witam

Do tej pory wszystkie systemy logowań jakie robiłem opierały się wyłącznie na sesjach. Ale chciał bym to zmienić (ponieważ denerwujące jest ciągłe logowanie) na Cookies. I tu pojawia się moje pytanie. Otóż naczytałem się w internecie że używanie cookies nie jest najlepszym rozwiązaniem, gdyż niektórzy internauci mogą mieć wyłączoną obsługę cookies z powodu bezpieczeństwa. Więc czy można podczas logowania ustawiać jednocześnie cookies i sesje ? Albo czy można jakoś sprawdzić czy użytkownik ma włączoną obsługę cookies, jeżeli tak to ustalamy ciasteczka a jeżeli nie to sesje.

A może jest inny sposób na dłuższe zapamiętanie danych niż cookies ?

Ten post edytował RubiX 8.01.2008, 10:43:41
Go to the top of the page
+Quote Post
nevt
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

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


Tak - można jednocześnie używać sesji i cookies... załóżmy że na stronie logowania - po poprawnej weryfikacji użytkownika - tworzysz ciasteczko 'zalogowany' oraz wpis do $_SESSION['zalogowany'], potem przekierowujesz do głównej strony serwisu...

Na każdej stronie serwisu (z wyjątkiem strony logowania) sprawdzasz parametry logowania w kolejności:
1. jest cookies 'zalogowany'?
2. jeśli nie - jest zmienna sesji 'zalogowany'?
3. jeśli nie - przekierowujemy do strony logowania,
4. jeśli 1 lub 2 tak - wyświetlamy zawartość strony...

Dzięki temu, jeżeli użytkownik ma włączoną obsługę cookies - logowanie zostanie zapamiętane na dłużej - a jeżeli nie - to będzie ważne w obrębie danej sesji.

Powodzenia.
Go to the top of the page
+Quote Post
RubiX
post
Post #3





Grupa: Zarejestrowani
Postów: 162
Pomógł: 6
Dołączył: 14.02.2007
Skąd: Poznań

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


Ok wielkie dzięki za pomoc ale z racji tego mam jeszcze 2 pytania:

1. Podczas prawidłowego logowania ustawiam cookies i sesje. Internauta zamyka stronę sesje sie tracą włącza stronę i działają cookies. I czy mogę oprzeć stronie na samych sesjach a na stronie głównej dać:

  1. <?php
  2. if ($_COOKIE['zalogowany']) {
  3. $_SESSION[zalogowany] = True;
  4. }
  5. ?>


I np jeżeli ktoś ma włączone cookies i wcześniej sie logował to teraz sesje ustawiają sie jako zalogowany a jeżeli niema włączonej obsługi cookies to musi się zalogować ?

Czy to jest dobre rozwiązanie ?

2. Czy w cookies mogę przechowywać login oraz hasło w md5 ? Np użytkownik wchodzi na stronie i po cookies pobieram dane z sql na jego temat i ustawiam w sesjach jego login, e-mail itp ? Czy to jest bezpieczne ?
Go to the top of the page
+Quote Post
daniel1302
post
Post #4





Grupa: Zarejestrowani
Postów: 602
Pomógł: 30
Dołączył: 1.08.2007
Skąd: Nowy Sącz

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


hasło MD5 nie ale mam pomysł ale zwykłe tak i potem konwersować na md5 a login śmiało bo ktoś może wyciągnąc twoje hasło
A jeśli chcesz przechowywać to możesz ale pierw zrob coś system kodowania tu masz przykład
  1. <?php
  2. $str = md5(sha1(md5(md5($str.'someshit').'anyshit').'o.0').'bullshit!');
  3. ?>
Go to the top of the page
+Quote Post
dadexix
post
Post #5





Grupa: Zarejestrowani
Postów: 439
Pomógł: 21
Dołączył: 28.06.2007
Skąd: Bielsko-Biała

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


hm... a nie lepiej generować coś unikatowego(np. md5(microtime()); ) zapisywać to do bazy danych wraz z loginem i wysyłać do ciastka? jeśli ta unikatowa wartość z ciastka będzie w bazie to znaczy że user jest zalogowany jako ten z loginem który jest w bazie przypisany do ciastka....
Tak działa system "zapamiętaj mnie" np. w phpBB2

Ten post edytował dadexix 8.01.2008, 12:54:35
Go to the top of the page
+Quote Post
netmare
post
Post #6





Grupa: Zarejestrowani
Postów: 285
Pomógł: 37
Dołączył: 18.12.2007
Skąd: Łódź

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


Ciastka nie są bezpieczne co byś nie robił

choćbyś użył 100 razy różnych funkcji skrótu w tym 2 swoich algorytmów to i tak kradzież ciastka pozwoli się zalogować nie znając hasła.

Jedyne bezpieczne rozwiązanie to sesje, ale żeby były bepieczne to też nie mogą być gołe, tak jak są dostraczane w php.

Ten post edytował netmare 8.01.2008, 15:48:19
Go to the top of the page
+Quote Post
dadexix
post
Post #7





Grupa: Zarejestrowani
Postów: 439
Pomógł: 21
Dołączył: 28.06.2007
Skąd: Bielsko-Biała

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


ale jak dzialają sesje? zapisują id sessji do ciastka... jak ktoś wyciągnie id sessji z czyjegoś ciastka to tak jak by to on się zalogował... żadna różnica... no chyba że czegoś nie wiem i sessje sprawdzają też ip - ale można też to robić z ciastkami:)
Go to the top of the page
+Quote Post
netmare
post
Post #8





Grupa: Zarejestrowani
Postów: 285
Pomógł: 37
Dołączył: 18.12.2007
Skąd: Łódź

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


Nie no, sesje trzeba wspomóc bo tak też są nieodporne na nic.

Ale z tymi ciastkami
Ja bym generował co tam sobie chcecie jako idnetyfikator usera nie powiązany z sesjami
lokalnie na serwerze zapisywał hash md5 z remote address, forwarded for i browsera (bez wyświetlania!!!).

I jak gosc wchodzi, nie ma sesji, ale ma ten identyfikator w ciastku to hash i porównanie z tym przypisanym do identyfikatora.

To da chyba największe szanse ochrony w przypadku kradzieży ciastka.

W końcu jak robisz serwis to chyba Twoi usesrzy powinni mieć jakieś poczucie bezpieczeństwa...
Go to the top of the page
+Quote Post
dadexix
post
Post #9





Grupa: Zarejestrowani
Postów: 439
Pomógł: 21
Dołączył: 28.06.2007
Skąd: Bielsko-Biała

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


Cytat
remote address, forwarded for i browsera (bez wyświetlania!!!).
już się można śmiać...? fowarded? no to masz podstrony 1.php 2.php 3.php 4.php 5.php cookie zapisujesz na 1.php, wchodzisz na 2.php i co? cookie nie aktywne... nie ma co kombinować... jedynie zapisywanie md5 browsera to nie jest bardzo za głupi pomysł... ale instalacje niektórych dodatków do przeglądarki, aktualizacja itd=utrata cookie a jemu chodzi o to by osoba była zalogowana jak najdłużej...


moja wersja:
w bazie pola |id|login|time|ip
w id np. md5(microtime());
w login - login osoby która jest zalogowana
time - kiedy ostatnio się wszedło
ip - zakodowane ip...

skrypt sprawdza najpierw czy jest to ip w bazie, jeśli jest to sprawdza czy ludzie którzy są w bazie mają to id ciastka co w cookie - będzie napewno jedno lub zero rekordów jako wyniki.. jeśli wszystko zwróci TRUE to zapisuje się sessje zwykłą jako osobę z loginem z bazy i upadatuje czas w bazie... można dodać by czas mógł wynosić max np. 7 dni potem usuwa się z bazy czy coś...

to cookie by miało służyć jako... hm.. przedlużacz sessji bo taki ma być efekt:)
Go to the top of the page
+Quote Post
netmare
post
Post #10





Grupa: Zarejestrowani
Postów: 285
Pomógł: 37
Dołączył: 18.12.2007
Skąd: Łódź

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


Jak mamy się pośmiać to opisz co ma wspólnego forwarded for z nazwami plików na sewerze? (:

Swoją drogą microtime to też nie jest głupie, tyle że trzeba ciągle aktualizować.

A mi się wydaje że jemu chodzi o to żeby zrobić coś jak zapamiętaj mnie na tym serwerze.

Ja jako user wolę mieć trochę bezpieczniej i 10 razy w roku stanąć przed koniecznością wpisania loginu
Go to the top of the page
+Quote Post
dadexix
post
Post #11





Grupa: Zarejestrowani
Postów: 439
Pomógł: 21
Dołączył: 28.06.2007
Skąd: Bielsko-Biała

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


Cytat
ak mamy się pośmiać to opisz co ma wspólnego forwarded for z nazwami plików na sewerze? (:
dobra sorka za tempy jestem:P(skojażyłem to fowarded for z foward url) ale patrzyłem troszkę w google i w jak dobrze rozumiem może być problem jeśli provider przeglądającego używa servera przekaźniczego... np. SQUID:)

Cytat
Swoją drogą microtime to też nie jest głupie, tyle że trzeba ciągle aktualizować.
z microtime chodziło mi o robienie uniq id - raz przy pierwszy wejściu

Cytat
A mi się wydaje że jemu chodzi o to żeby zrobić coś jak zapamiętaj mnie na tym serwerze.
też tak go zrozumiałem...
Cytat
Ja jako user wolę mieć trochę bezpieczniej i 10 razy w roku stanąć przed koniecznością wpisania loginu
patrzymy na to inaczej.... ja sobie nie wyobrażam żeby user był u mnie zalogowany na miesiąc(10 razy w roku = 10/12=logowanie co 1.2 miecha sredni)... od tak... dla mnie to max 7-14dni...
Go to the top of the page
+Quote Post
netmare
post
Post #12





Grupa: Zarejestrowani
Postów: 285
Pomógł: 37
Dołączył: 18.12.2007
Skąd: Łódź

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


@forwarded, nigdy się nad tym nie zastanwaiałem, ale nie słyszałem o problemach w działaniu

@sredni czas zalogowania, więc myślę że temat aktualizacji przeglądarki możemy odpuścić i uznać za ok to md5

@microtime, Twój pomysł w takim razie nie daje nic w przypadku kradzieży zawartości ciacha ale można chyba by go rozszerzyć na działanie podczas weryfikowania sesji. Mam nawet pomysł ale jest długi do opisania w skrócie Ci napiszę że chodzi mi o to aby za każdym razem przesyłać microtime i go porównywać jak się nie zgodzi to usunąć wpis z nim związany, co w przypadku kradzieży ciacha poskutkuje wylogowaniem i właściciela i złodzieja ciastka.

Offtop:
Jak my się tu jeszcze trochę pokłócimy to autor tematu będzie mógł robic doktorat z zabezpieczania sesji w php (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
dadexix
post
Post #13





Grupa: Zarejestrowani
Postów: 439
Pomógł: 21
Dołączył: 28.06.2007
Skąd: Bielsko-Biała

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


Hm... ale Ty zakładasz ze każdyemu ciacho będą kraść:P po pierwsze wątpie by to był tak wymagający projekt że każdą osobę będą nasłuchiwać hakjerzy w celu kradzieży ciacha... po drugie... jak ktoś chce korzystać z neta niech się umie bronić.... jak nie umie się bronić... jego strata... przyjmuje zasade "internet dla myślących"

to powiedz jak zabezpieczasz zwykłą sessje - to można zabezpieczyć tak samo:)
Cytat
Offtop:
Jak my się tu jeszcze trochę pokłócimy to autor tematu będzie mógł robic doktorat z zabezpieczania sesji w php biggrin.gif
my się nie kłócimy tylko wymieniamy poglądami:)
Go to the top of the page
+Quote Post
RubiX
post
Post #14





Grupa: Zarejestrowani
Postów: 162
Pomógł: 6
Dołączył: 14.02.2007
Skąd: Poznań

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


Ok wielkie dzieki za pomoc ale mam nastepne pytanie:

Chcę zrobić tak po zalogowaniu ustawiam sesje i ciasteczko a do bazy sql do tabeli wgrywam id login i jakiś wygenerowany długi ciąg cyfr, który umieszczam równiez w ciasteczku.

i teraz gdy osoba wejdzie ponownie na stronę pobierany będzie ciąg cyfr z ciasteczka i porownywany z tymi w bazie jezeli bedzie sie zgadzal z istniejącym juz w bazie danych user zostanie zalogowany wedlug wpisanego wczesniej loginu do bazy sql.

Czy jest to dobre rozwiazanie (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
dadexix
post
Post #15





Grupa: Zarejestrowani
Postów: 439
Pomógł: 21
Dołączył: 28.06.2007
Skąd: Bielsko-Biała

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


moja odpowiedz: dobre, zapisujesz sessje z tym loginem z bazy, dodaj jeszcze pole z czasem a w nim dawaj kiedy ktoś ostatnio odświerzyl strone(updatuj przy odświerzeniu)

odpowiedz netmare: Dobre ale mało bezpieczne, jak ktoś ukradnie ciacho to będzie zalogowany za kogoś innego...
Go to the top of the page
+Quote Post
RubiX
post
Post #16





Grupa: Zarejestrowani
Postów: 162
Pomógł: 6
Dołączył: 14.02.2007
Skąd: Poznań

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


No okej ale co bym nie dał do ciastka zeby potem sprawdzic uzytkownika i go zalogowac automatycznie to zawsze ktos moze ukrasc ciastko i co kolwiek niebylo by w ciastku zeby sprawdzic to i tak zaloguje sie na kogos innego.

Czy jest jakieś zabezpieczenie tego ?
Go to the top of the page
+Quote Post
dadexix
post
Post #17





Grupa: Zarejestrowani
Postów: 439
Pomógł: 21
Dołączył: 28.06.2007
Skąd: Bielsko-Biała

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


Cytat
lokalnie na serwerze zapisywał hash md5 z remote address, forwarded for i browsera (bez wyświetlania!!!
czy to nie jest cytat z tego tematu?
Go to the top of the page
+Quote Post
netmare
post
Post #18





Grupa: Zarejestrowani
Postów: 285
Pomógł: 37
Dołączył: 18.12.2007
Skąd: Łódź

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


Cytat(dadexix @ 8.01.2008, 17:37:46 ) *
Hm... ale Ty zakładasz ze każdyemu ciacho będą kraść (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) po pierwsze wątpie by to był tak wymagający projekt że każdą osobę będą nasłuchiwać hakjerzy w celu kradzieży ciacha... po drugie... jak ktoś chce korzystać z neta niech się umie bronić.... jak nie umie się bronić... jego strata... przyjmuje zasade "internet dla myślących"


No tutaj moim zdaniem trochę przesadziłeś, choć może Twoja ignorancja wynika z niewiedzy.
"będą nasłuchiwać hakjerzy" - no cóż ja znam trochę więcej sposobów na zaznajomienie się z czyimś ciastkiem.
Nawet phpBB, na którym tak się wzorujesz, co jakiś czas okazuje się podatnym w penych miejscach na xss-a.

Pochwal się swoim "internetem dla myślących", i powiedz jak się bronisz przed kradzieżą ciastek
Może np jako admin forum wylogowujesz się za każdym razem przed kliknięciem linku (IMG:http://forum.php.pl/style_emoticons/default/haha.gif)

Przy okazji ja wyznaję zasadę "lenistwo warunkiem postępu", i nie uważam żeby użytkownik internetu miał popadać w paranoję broniąc się przed możliwymi atakami, bo lepiej żeby ten czas tworzył coś pożytecznego. A że myślenie ponoć nie boli to webmaster powinien myśleć jak zabezpieczyć użytkownika. Jakby wszyscy byli tak leniwi jak Ty, to hasła byś pewnie szyfrował rotem, a bazę danych miał w zeszycie zamiast na dysku (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Edit: //oczywiście gdyby ktoś już wymyślił pismo i papier (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

@autor pytania
Ja już Ci napisałem jakie widzę możliwości zabezpieczenia przed kradzieżą ciastek, więcej na razie pomysłów nie mam.
Jakby coś to pisz na PW, postram Ci się jakoś pomóc. Pisz dzisiaj albo w przyszłym tygodniu.

Ten post edytował netmare 8.01.2008, 19:24:51
Go to the top of the page
+Quote Post
RubiX
post
Post #19





Grupa: Zarejestrowani
Postów: 162
Pomógł: 6
Dołączył: 14.02.2007
Skąd: Poznań

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


Okej więc na koniec zrobiłem tak :

po zalogowaniu ustawiłem cookies (ważne 2 dni) w którym zapisałem losowy ciąg znaków, a do tabeli sql wgrałem id, login, taki sam ciąg znaków jak do cookies, IP użytkownika.

I teraz jak user ponownie wejdzie na stronę pobierana jest od niego zawartość cookies (czyli ten ciag znaków) oraz aktualne IP i porównywane z wpisem w tabeli jeżeli ip i kod zgadza się user jest logowany na wcześniej zapisany do bazy login.

Myślę że jest to bezpieczne ponieważ samo cookies nic nie daje, ponieważ jest jeszcze autoryzacja IP.
Go to the top of the page
+Quote Post
nevt
post
Post #20





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

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


nie będę oceniał na ile bezpieczne, ale na pewno bezużyteczne dla wszystkich mających zmienne ip - czyli dla całkiem sporej grupy użytkowników internetu...
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 21:25