Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]System Autoryzacji - wasze najlepsze spodoby
b_chmura
post 11.09.2007, 19:14:46
Post #1





Grupa: Zarejestrowani
Postów: 813
Pomógł: 34
Dołączył: 18.03.2007
Skąd: o stamtąd

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


Witam

Potrzebuje zrobić system autoryzacji. Chciałem się was zapytać jakie są najlepsze sposoby, jak najlepiej się zabezpieczyć przed możliwymi włamami, gdzie i jak przetrzymywać dane ze taki i taki user jest zalogowany?
Interesują mnie tylko najlepsze/najbezpieczniejsze rozwiązania.

Liczę na waszą kreatywność.

Pozdrawiam
Chmura

EDIT
Dotychczas korzystałem z link dziś nie wydaje mi się to najlepszym rozwiązaniem...

Ten post edytował b_chmura 11.09.2007, 19:15:40
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
Fixus
post 11.09.2007, 20:27:34
Post #2





Grupa: Zarejestrowani
Postów: 295
Pomógł: 9
Dołączył: 8.02.2006

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


hmm na co powinno się zwrócić uwagę:
1. hashowanie hasła
2. ograniczyć ilość wpisywanych znaków
3. zabezpieczyć przed wprowadzeniem niebezpiecznych znaków
4. korzystać z troszkę mniej standardowych nazwa tabel i pól jak pojedyńcze słowa "user", "login" czy "password"
Go to the top of the page
+Quote Post
chiken
post 12.09.2007, 14:19:17
Post #3





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 31.07.2006
Skąd: Czeladź

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


co do przechowywania danych, to przetrzymuje je w sesji, login i haslo,

i przy kazdym odswiezeniu strony / przejsciu na inna sie loguje / sprawdza czy uzytkownik ma uprawnienia,

nigdy np nie trzymam informacji ze uzytkownik sie zologowal, i tylko to pozniej po kazdym odswiezeniu sprawdzam


--------------------
Projektowanie stron internetowych
Go to the top of the page
+Quote Post
Prph
post 12.09.2007, 15:08:12
Post #4





Grupa: Zarejestrowani
Postów: 338
Pomógł: 2
Dołączył: 4.03.2006
Skąd: Łódź

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


Cytat(chiken @ 12.09.2007, 13:19:17 ) *
nigdy np nie trzymam informacji ze uzytkownik sie zologowal, i tylko to pozniej po kazdym odswiezeniu sprawdzam


Dlaczego przechowywanie loginu i hasla bedzie bezpieczniejsze niz samo "zalogowany"?
Go to the top of the page
+Quote Post
NuLL
post 12.09.2007, 15:24:03
Post #5





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


Przechowywanie hasla to czysta glupota bo kto go potrzebuje ? Tak naprawde jedyna rzecza ktora powinna byc w sesji to id uzytkownika oraz te dane ktorych sie czesto uzywa np do wypisania - np. login,email czy nazwa ekranowa tak nie pobierac ich za kazdym zadanie z bazy danych.


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
qqrq
post 12.09.2007, 17:25:49
Post #6





Grupa: Zarejestrowani
Postów: 418
Pomógł: 8
Dołączył: 16.11.2006

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


Ja bym jednak za każdym wejściem na stronę sprawdzał użytkownika. Np. jedna zmienna sesji to będzie login/email/id czy coś podobnego (unikalnego sie rozumie), a druga to zahashowana konkatenacja loginu i hasła (albo czegokolwiek innego, byle nie tego samego, co trzymamy w pierwszej zmiennej).


--------------------
Go to the top of the page
+Quote Post
b_chmura
post 12.09.2007, 17:31:26
Post #7





Grupa: Zarejestrowani
Postów: 813
Pomógł: 34
Dołączył: 18.03.2007
Skąd: o stamtąd

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


a jest taka możliwość żeby ktoś się podszył pod jakąś sesje?
żeby ktoś odczytał co sie znajduje w sesji?
Go to the top of the page
+Quote Post
qqrq
post 12.09.2007, 17:59:49
Post #8





Grupa: Zarejestrowani
Postów: 418
Pomógł: 8
Dołączył: 16.11.2006

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


No właśnie można, aczkolwiek nie jest to takie proste (ogólnie sesje są po to, żeby nikt niepowołany tam się nie wpieprzał, ale wiadomo - dla chcącego nic trudnego smile.gif ). Dlatego ten cały hash...


--------------------
Go to the top of the page
+Quote Post
b_chmura
post 12.09.2007, 18:10:37
Post #9





Grupa: Zarejestrowani
Postów: 813
Pomógł: 34
Dołączył: 18.03.2007
Skąd: o stamtąd

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


tak mi się wydawało dlatego czekam na dalsze sugestie jak bezpiecznie się zalogować i przechowywać dane o użytkowniku by tylko po poprawnym zalogowaniu ukazały mu sie odpowiednie dane.

a może by tak napisać własny hash?
Go to the top of the page
+Quote Post
qqrq
post 12.09.2007, 18:14:25
Post #10





Grupa: Zarejestrowani
Postów: 418
Pomógł: 8
Dołączył: 16.11.2006

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


Własny hash? Przecież masz md5. Hasha nie odczytasz - to jest tak jakby "szyfrowanie w jedną stronę".


--------------------
Go to the top of the page
+Quote Post
b_chmura
post 12.09.2007, 18:28:09
Post #11





Grupa: Zarejestrowani
Postów: 813
Pomógł: 34
Dołączył: 18.03.2007
Skąd: o stamtąd

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


szczerze sie przyznam ze nie znam dokładnej definicji "hash'a" ale chodziło mi o własne zakodowanie danych wraz z funkcją odpowiedzialną za odkodowanie..

np zamiana liter na cyfry i wykonanie jakiegoś działania matematycznego
Go to the top of the page
+Quote Post
qqrq
post 12.09.2007, 19:34:58
Post #12





Grupa: Zarejestrowani
Postów: 418
Pomógł: 8
Dołączył: 16.11.2006

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


Rozumiem o co Ci chodzi, ale weź pod uwagę to, że twój szyfr ktoś może odszyfrować. Funkcji hashującej odszyfrować się nie da. A jak sprawdzać? Za każdym wywołaniem strony bierzesz dane z sesji (załóżmy, że w zmiennych sesji masz login i md5(login.hasło) - zhashowana konkatenacja, że się tak wyrażę... smile.gif ), po czym pobierasz dane z bazy (u nas login i hasło, tak żeby login pasował do hasła) i porównujesz (patrzysz czy md5(login_z_bazy.hasło_z_bazy) == hash_z_sesji). I tyle.


--------------------
Go to the top of the page
+Quote Post
b_chmura
post 12.09.2007, 19:41:12
Post #13





Grupa: Zarejestrowani
Postów: 813
Pomógł: 34
Dołączył: 18.03.2007
Skąd: o stamtąd

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


to nie zabije bazy? jak jej przyjdzie hashowac wszytkie loginy i hasła... może od razu przy rejestracji zastosować tą kombinacje?
Go to the top of the page
+Quote Post
legorek
post 12.09.2007, 20:24:10
Post #14





Grupa: Zarejestrowani
Postów: 411
Pomógł: 35
Dołączył: 27.06.2004
Skąd: Kraków

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


O przepraszam, mając hash masz spore szanse odzyskania hasła. Poczytajcie o tęczowych tablicach. W internecie są też strony typu http://md5.rednoize.com/ które zawierają 50 000 000 najpopularniejszych haseł i hashy. Więc to nie jest takie trudne. Najlepszą obroną jest solenie hashowanych stringów.

Ale to była taka mała dygresja.

Wracając do tematu. Najlepsze są rozwiązania najprostsze.

Przy rejestracji zapisujesz w bazie: id, login, hash hasła.
Prz próbie zalogowania robisz: SELECT * FROM user WHERE `login`='$login' AND `pass`=MD5('$pass');
Jeśli to zapytanie zwróci ilość rekordów różną od 1 to znaczy, że coś jest nie tak: nie ma usera, złe hasło etc.
Jeśli wszystko jest OK, apisujemy do sesji np id i login. Nie ma sensu niczego więcej, chyba że jest to dla Ciebie wygodne.
Teraz, żeby sprawdzić czy user jest zalogowany sprawdzamy czy te dane istnieją w sesji.
Aby wylogować usera usuwamy jest z sesji.

Najsłabszym ogniwem tego rozwiązania jest zapytanie do bazy, mamy tu dane które pochodzą od użytkownika. Dlatego najaważniejsz rzeczą jest taka konfiguracja serwera i fitlrowanie zapytań, aby uniemożliwić SQL injection.

To wszystko, nie ma sposobu, żeby oszukać taki system jeśli jest dobrze zaprojektowany.

Istnieją jeszcze dwa niebezpieczeństwa, jednemu możesz zapobiec, drugiemu możesz tylko próbować:
1) Zła konfiguracja serwera, która pozwoliłaby w jakiś sposób uzyskać atakującemu do katalogu z sesjami (czy do bazy z sesjami, jeśli masz własny mechanizm obsługi sesji) Ale szczerze wątpie żeby istniał tak lamowaty admin serwera smile.gif
2) Zdobycie przez atakującego identyfikatora sesji ofiary. To już poważniejszy problem, bo atakujący może działać na koncie ofiary. Musisz tak przygotować swój serwis, aby nie dało się dokonać Code Insertion. (konkretnie chodzi o wstrzyknięcie javascriptu lub innego języka skryptowego który pozwala na dostęp do ciasteczek) Ale to już jest temat rzeka, bo nawet największe serwisy sobie z tym nie zawsze radzą.

Pozdrawiam!


--------------------
Go to the top of the page
+Quote Post
qqrq
post 12.09.2007, 20:45:31
Post #15





Grupa: Zarejestrowani
Postów: 418
Pomógł: 8
Dołączył: 16.11.2006

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


legorek => No tak, ja mówiłem o teorii, czyli o funkcji hashującej jako funkcji z dążącym do 0 prawdopodobieństwem kolizji. Zawsze można zamiast md5 wybrać coś "lepszego".

b_chmura => Z podanych przez legorka "zagrożeń" naprawdę ciężko wyeliminować to drugie.

Cytat
Ale to już jest temat rzeka, bo nawet największe serwisy sobie z tym nie zawsze radzą.


Prawda... aaevil.gif


--------------------
Go to the top of the page
+Quote Post
Prph
post 12.09.2007, 22:59:04
Post #16





Grupa: Zarejestrowani
Postów: 338
Pomógł: 2
Dołączył: 4.03.2006
Skąd: Łódź

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


Cytat(qqrq @ 12.09.2007, 16:59:49 ) *
No właśnie można, aczkolwiek nie jest to takie proste (ogólnie sesje są po to, żeby nikt niepowołany tam się nie wpieprzał, ale wiadomo - dla chcącego nic trudnego smile.gif ). Dlatego ten cały hash...


Moja sesja: id = 5, login = prph, haslo = *****;

Kradniesz moja sesje.

Twoja sesja to: id = 5, login = prph, haslo = *****;

Wiec, czy sprawdzisz, czy w sesji jest ustawione "zalogowany", czy sprawdzisz haslo to wyjdzie na to samo. No pomijam, ze baza dostaje w tylek na dzien dobry.
Go to the top of the page
+Quote Post
qqrq
post 13.09.2007, 00:50:38
Post #17





Grupa: Zarejestrowani
Postów: 418
Pomógł: 8
Dołączył: 16.11.2006

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


W tym przypadku wszystko jedno, chodzi o to, żebyś nie mógł sobie sam wpisać (jakkolwiek byś to zrobił) zmiennych sesji. Jak jest tylko zmienna "zalogowany" to żaden problem, a tak musisz znać dane konta (login, hasło, etc.).
Zresztą ja spotykałem się głównie z takimi rozwiązaniami, chociażby osCommerce, i tak to zawsze kazało mi robić szefostwo z pracy, że tak się na autorytety powołam... smile.gif

A co do tego, że "baza dostaje w tyłek" - nie dostaje aż tak bardzo. Ten jeden SELECT przy wczytywaniu strony wielkiej krzywdy nie robi.


--------------------
Go to the top of the page
+Quote Post
chiken
post 13.09.2007, 10:40:26
Post #18





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 31.07.2006
Skąd: Czeladź

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


A wiec dlaczego za kazdym razem sprawdzam czy dana osoba jest w bazie danych, przy kazdym odswiezeniu:

jesli osoba sie zaloguje, i dane ze zalogowany bedzie przechowywac w sesji, to taka osoba moze byc zalogowana nawet przez rok jesli bedzie sobie strone odswiezal, i np jesli np admin zablokuje uzytkownika, lub zmieni mu jakies dane ktore sa przechowywane w sesji, to i tak nic nie da , jesli czlowiek jest zalogowany.

Dlatego zawsze sprawdzam czy dane login-haslo zgadza sie z tym w bazie, i danych uzytkownika nie przechowuje w sesji tylko w normalnej zmiennej, i aktualizuje za kazdym odswiezeniem


--------------------
Projektowanie stron internetowych
Go to the top of the page
+Quote Post
Sedziwoj
post 13.09.2007, 11:21:37
Post #19





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


Sesja ma dwa czasy życia, jeden pomiędzy odświeżeniami drugi od założenia. Więc sesja może się przeterminować np. po dniu nie ważne że ciągle odświeżasz.
Przypadek kiedy użytkownik wyleciał a ma aktywną sesje jest na tyle rzadki, że nie warto męczyć systemu ciągłym sprawdzaniem.
Ale to wszystko już zależy od systemu który wymaga autoryzacji... bo można sprawdzać uprawnienia do danej akcji za każdym razem itp. itd.


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post
qqrq
post 13.09.2007, 12:38:33
Post #20





Grupa: Zarejestrowani
Postów: 418
Pomógł: 8
Dołączył: 16.11.2006

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


No cóż, temat rzeka, jak widać... W gruncie rzeczy proponuję używanie PEAR::Auth. Sprawdzone, rozwijane i projektowane przez tęższe umysły niż niżej podpisany...


--------------------
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 25.07.2025 - 09:51