Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Autoryzacja użytkownika, co lepsze???
Forum PHP.pl > Forum > PHP
Citral
Witam, mam pytanie do osób, które stworzyły już wiele serwisów, na które użytkownik musi się zalogować. Co jest lepsze - przechowywanie w sesji loginu i hasła użytkownika i sprawdzanie ich poprawności po każdym wejściu na jakąkolwiek stronę serwisu (poprzez połączenie się z bazą) czy może lepiej po poprawnym zalogowaniu użytkownika ustawić jakąś zmienną "logowanie" na 1 i sprawdzanie jej wartości na każdej kolejnej stronie czy użytkownik jest zalogowany?
cichy
Cytat
Witam, mam pytanie do osób, które stworzyły już wiele serwisów, na które użytkownik musi się zalogować. Co jest lepsze - przechowywanie w sesji loginu i hasła użytkownika i sprawdzanie ich poprawności po każdym wejściu na jakąkolwiek stronę serwisu (poprzez połączenie się z bazą) czy może lepiej po poprawnym zalogowaniu użytkownika ustawić jakąś zmienną "logowanie" na 1 i sprawdzanie jej wartości na każdej kolejnej stronie czy użytkownik jest zalogowany?

Myśle że sam sobie odpowiedziałeś na pytanie.
Zastanów się co jest szybsze?
Ustawianie 2 zmiennych i łączenie sie z bazą na każdej podstronie.
czy ustawienie 1 zmiennej i sprawdzanie tylko czy ma wartosc 1 czy 0 winksmiley.jpg

Pozdro
seaquest
pytanie tylko co jest bezpieczniejsze :?:

moim zdaniem lepszy jest pierwszy sposób, ponieważ jest dużo bezpieczniejszy....
matid
Czasem trzeba pójść na kompromis pomiędzy szybkością działania skryptu a bezpieczeństwem. Rozumiem, gdyby drugi sposób był dużo bardziej niebezpieczny od pierwszego, ale ciężko jest podszyć się i zmienić dane sesji...
seaquest
ale czy to sprawdzenie faktycznie trwa tak dlugo :?:
w moim cms'ie nie dluzej niz 0,12 sek (4 pomiary)
Seth
Cytat
pytanie tylko co jest bezpieczniejsze :?:

moim zdaniem lepszy jest pierwszy sposób, ponieważ jest dużo bezpieczniejszy....

Nie jest.
Jezeli ktos przejmie sesje to przeciez przejmie login i haslo zapsiane w niej.
To samo tyczy sie przejecia sesje ze zmienna z informacja o zalogowaniu.

Reasumujac: oba rozwiazania sa tak samo bezpieczne, ale to pierwsze jest poprostu nie potrzbne, malo eleganckie i malo wydajne.
Citral
thx...
Seth takiego podsumowania oczekiwałem biggrin.gif
[fisher]
Cytat
moim zdaniem lepszy jest pierwszy sposób, ponieważ jest dużo bezpieczniejszy....
Jezeli ktos przejmie sesje to przeciez przejmie login i haslo zapsiane w niej.
To samo tyczy sie przejecia sesje ze zmienna z informacja o zalogowaniu.
Reasumujac: oba rozwiazania sa tak samo bezpieczne, ale to pierwsze jest poprostu nie potrzbne, malo eleganckie i malo wydajne.


Oczywiscie pamietajac o odpowiednim ustawieniu register_globals zeby nie dac szans cfaniaczkom probujacym napdisac sesje tak login.php?Zalogowany=1
Moze ciezko zgadnac to przy zamknietych projektach ale jesli otworzysz kod to mozesz sie spodziewac przykrych niespodzianek (np. Twoj nowy CMS na hostingu z register_globals=Off)
Mowie to bo jeszcze wiele serwerow ma wlaczone register_globals

Jesli przechowujesz haslo zahaszowane md5 (a raczej powinno sie tak robic) to wydaje mi sie ze pierwsza metoda jest mimo wszystko bezpieczniejsza (raczej nic nie da podpatrzenie hasla tzn 'haszy')

A co do wydajnosci? Jesli uzywasz persistent connections, haslo mozesz przekazywac na wypadek rozlaczenia.
Jesli uzywasz polaczen stalych i tak musisz sie polaczyc za kazdym przeladowaniem skryptu.

Tak wiec nie wydaje mi sie ze przechowywanie hasla w sesji jest mniej wydajne Seth
zombie
Cytat
"]Oczywiscie pamietajac o odpowiednim ustawieniu register_globals zeby nie dac szans cfaniaczkom probujacym napdisac sesje tak login.php?Zalogowany=1

a jeśli sprawdzam sesję przez
[php:1:b484e17cd0]<?php
if (session_is_registered("nazwa")){}
?>[/php:1:b484e17cd0]
lub
[php:1:b484e17cd0]<?php
if ($_SESSION['nazwa']){}
?>[/php:1:b484e17cd0]
... to też muszę wyłączyć globale?
[fisher]
Cytat
a jeśli sprawdzam sesję przez
[php:1:99eae6ff9a]<?php
if (session_is_registered("nazwa")){}
?>[/php:1:99eae6ff9a]
lub
[php:1:99eae6ff9a]<?php
if ($_SESSION['nazwa']){}
?>[/php:1:99eae6ff9a]
... to też muszę wyłączyć globale?


Nie, tablice superglobalne (_SESSION, _COOKIE, _GET, _POST) tworzone sa niezaleznie od register_globals
scanner
Ale za to trzymasz w sesji dwie zmienne tekstowe (login i hasło) zamiast jednego inta userID. Jeśłi user nie jest zalogowany, userID trzyma 0 lub jakiś inny ID zdefiniowany w bazie dla Gościa. Za każdym razem pytasz bazę czy login i hasło pasują... potem updatujesz tabelę "last-visit".. a tak tylko update ID pobranego z sesji...
Jakoś trzymanie hasła i loginu niezbyt mi się podoba.
[fisher]
Cytat
Ale za to trzymasz w sesji dwie zmienne tekstowe (login i hasło) zamiast jednego inta userID. Jeśłi user nie jest zalogowany, userID trzyma 0 lub jakiś inny ID zdefiniowany w bazie dla Gościa. Za każdym razem pytasz bazę czy login i hasło pasują... potem updatujesz tabelę "last-visit".. a tak tylko update ID pobranego z sesji...
Jakoś trzymanie hasła i loginu niezbyt mi się podoba.


ok, czesciowo to jest racja, ale przypuscmy ze pracujesz nad projektem i otwierasz zrodla.
kazdy widzi jak sie nazywa zmienna sesyjna (moze zajrzec w zrodla)
napewno trafi sie hosting ktory bedzie obslugiwal nasz system (powiedzmy CMS) i bedzie mial wlaczone globale ? (mozna sobie przypomniec nazwe zmiennej i nadpisac sesje)

tylko co do tego mam zastrzezenia, w reszcie sie zgadzam

Ps. Reasumujac: Upublicznienie kodow zrodlowych spowoduje wyciek danych z systemu - Podsekretarz Stanu w Ministerstwie Edukacji Narodowej i Sportu Hanna Kuzińska

To bylo juz dawno temu ale jeszcze mnie smieszy i na dodatek ma zwiazek z biezacym postem ;-D
scanner
[php:1:2eadfe341e]<?php
// config.inc.php
$arrConfig['token'] = 'put_short_text_without_spaces_here';
?>[/php:1:2eadfe341e][php:1:2eadfe341e]<?php
// index.php
echo $_SESSION[$arrConfig['token'].'_userID'];
?>[/php:1:2eadfe341e]
Oczywiście możńa to zamknac w małą fukcję/metodę:[php:1:2eadfe341e]<?php
function ReadGlobal( $strGlobalName, $strKey)
{
$strGlobalName= '_'.$strGlobalName;
return $$strGlobal[$arrConfig['token'].$strKey];
}

$intUserID = ReadGlobal( 'SESSION', '_userID' )
?>[/php:1:2eadfe341e]Instalująć klientowi sam wpisujesz dowolny token, a jak instaluje sobie sam, to wystarczy dać warning w manualu, zę jest to zalecane.
[fisher]
Cytat
Instalująć klientowi sam wpisujesz dowolny token, a jak instaluje sobie sam, to wystarczy dać warning w manualu, zę jest to zalecane.

Tak masz racje, ale czy to nie jest bardziej 'skomplikowane' od przechowywania dwoch zmiennych w sesji (login i md5(password))? ;-)
No chyba ze rozmawiamy o maksymalnym odciazeniu bazy z zbednych zapytan (wtedy ma to rzeczywiscie sens i zgadzam sie w 100%), a nie o bezpieczenstwie przechowywania zmiennych w sesji.
scanner
Myślałem o odciążeniu bazy. Dodatkowo dany token można wykorzyustać do innych rzeczy, np. do szyfrowania zserializoweanej sesji, czy czegoś innego.
Oczywiście jest jeszcze jeden motyw: handler sesji w bazie smile.gif
[fisher]
Ps. Przetestowalem przed chwila, ze nawet przy wlaczonym register_globals
index.php?asshole=asdsasd nie nadpisze zmiennej sesyjnej _SESSION['asshole']

Hmm dziwne a wydawalo mi sie ze powinna nadpisac, bylem tego pewny :(

Masz racje
[fisher]
Ok jedna sprawa zamknieta, a co doradzisz w takiej sprawie ?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.