![]() |
![]() ![]() |
![]() |
![]() ![]()
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 -------------------- |
|
|
![]()
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. -------------------- - Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... - |
|
|
![]()
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ć:
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 ? -------------------- |
|
|
![]()
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
|
|
|
![]()
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 -------------------- "Na przykład zmiennej $jestem_najlepszy przypisujemy wartość logiczną TRUE"
Ja: użyj funkcji[...] Grins: mów normalnie do mnie a nie po polsku Ja: normalnie to znaczy jak? Grins: No w PHP... inaczej mój parser ledwo kuma:) |
|
|
![]()
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 |
|
|
![]()
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:)
-------------------- "Na przykład zmiennej $jestem_najlepszy przypisujemy wartość logiczną TRUE"
Ja: użyj funkcji[...] Grins: mów normalnie do mnie a nie po polsku Ja: normalnie to znaczy jak? Grins: No w PHP... inaczej mój parser ledwo kuma:) |
|
|
![]()
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... |
|
|
![]()
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:) -------------------- "Na przykład zmiennej $jestem_najlepszy przypisujemy wartość logiczną TRUE"
Ja: użyj funkcji[...] Grins: mów normalnie do mnie a nie po polsku Ja: normalnie to znaczy jak? Grins: No w PHP... inaczej mój parser ledwo kuma:) |
|
|
![]()
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 |
|
|
![]()
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ściuCytat 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...
-------------------- "Na przykład zmiennej $jestem_najlepszy przypisujemy wartość logiczną TRUE"
Ja: użyj funkcji[...] Grins: mów normalnie do mnie a nie po polsku Ja: normalnie to znaczy jak? Grins: No w PHP... inaczej mój parser ledwo kuma:) |
|
|
![]()
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 ![]() |
|
|
![]()
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: my się nie kłócimy tylko wymieniamy poglądami:)
Jak my się tu jeszcze trochę pokłócimy to autor tematu będzie mógł robic doktorat z zabezpieczania sesji w php biggrin.gif -------------------- "Na przykład zmiennej $jestem_najlepszy przypisujemy wartość logiczną TRUE"
Ja: użyj funkcji[...] Grins: mów normalnie do mnie a nie po polsku Ja: normalnie to znaczy jak? Grins: No w PHP... inaczej mój parser ledwo kuma:) |
|
|
![]()
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 ![]() -------------------- |
|
|
![]()
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... -------------------- "Na przykład zmiennej $jestem_najlepszy przypisujemy wartość logiczną TRUE"
Ja: użyj funkcji[...] Grins: mów normalnie do mnie a nie po polsku Ja: normalnie to znaczy jak? Grins: No w PHP... inaczej mój parser ledwo kuma:) |
|
|
![]()
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 ? -------------------- |
|
|
![]()
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?
-------------------- "Na przykład zmiennej $jestem_najlepszy przypisujemy wartość logiczną TRUE"
Ja: użyj funkcji[...] Grins: mów normalnie do mnie a nie po polsku Ja: normalnie to znaczy jak? Grins: No w PHP... inaczej mój parser ledwo kuma:) |
|
|
![]()
Post
#18
|
|
![]() Grupa: Zarejestrowani Postów: 285 Pomógł: 37 Dołączył: 18.12.2007 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Hm... ale Ty zakładasz ze każdyemu ciacho będą kraść ![]() 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 ![]() 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 ![]() Edit: //oczywiście gdyby ktoś już wymyślił pismo i papier ![]() @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 |
|
|
![]()
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. -------------------- |
|
|
![]()
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...
-------------------- - Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... - |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 03:23 |