MOniToR
21.02.2005, 00:38:54
Mam zamiar zrobić dośc dużą stronę. Chciałbym przechowywać uprawnienia użytkowników w ciasteczkach ale nie wiem czy sa one wystraczające bezpieczne. Czy istnieje możliwośc aby ktoś upierdliwy stworzył/edytował na swoim kompie cookie, które by mu wtedy dawały okreslone uprawnienia na stronie?
Yarecki
21.02.2005, 00:40:38
To są pliki txt, także każdy może w nich grzebać.
Lepiej przechowywać takie dane w sesjiach, po stronie serwera.
dr_bonzo
21.02.2005, 00:51:35
User moze (w Operze prosciutko) edytowac cookiesy. Uprawnienia NIE MOGA byc przechowywane u usera tylko u ciebie (na twoim serwerze).
User loguje sie na twojej stronie -- czyli posiada jakies konto -- do tego konta sa przyporzadkowane uprawnienia i tyle.
MOniToR
22.02.2005, 01:43:59
No tak, ale chciałbym aby dane były w cookies ponieważ chcem zrobic taką opcję jak'loguj automatycznie'. I teraz nie wiem jak to zrobić, bo nawet jeżeli dam w ciasteczkach samo id usera, to i tak ktos kto będzie chciał uprzykrzyc życie włascicielowi strone wyedytuje w cookies swoje id na id admina. Możecie mi w tym cos poradzić ?
Kuziu
22.02.2005, 01:48:52
To może dodaj do cookies poza ID także zahashowane hasło funkcją np. md5().
Dzięki temu nikt nie wyedytuje jednocześnie ID oraz HASŁA w dodatku zahashowanego.
I przy każdej akcji na stronie ... sprawdzaj czy zahashowane hasło z cookies zgadza się z zahashowanym z bazy danych.
Puciek
22.02.2005, 05:45:49
Czyli żeby przedstawić ci to w praktyce
<?php
if( !( empty( $_COOKIE['login'] ) ) && !( empty( $_COOKIE['haslo'] ) ) ) {
sprawdz_login( $_COOKIE['login'], $_COOKIE['haslo'] );
pobierz_uprawnienia( $_COOKIE['login'] );
}
else
{
formularz_logowania();
}
?>
Gdzie przyjmiemy że funkcja "sprawdz_login" sprawdza czy jest poprawne hasło do logina a formularz_logowania wyświetla odpowiedni do zalogowania sie formularz a pobierz_uprawnienia jak można wywnioskować poprstu je pobiera ^^
Yarecki
22.02.2005, 13:35:17
Hmm ja bym w ciastku trzymał login i md5( $login . md5( $password ) ).
Puciek
22.02.2005, 15:11:49
Cytat(Yarecki @ 2005-02-22 14:35:17)
Hmm ja bym w ciastku trzymał login i md5( $login . md5( $password ) ).
Toteż jest to logiczne, tu niema samego logowanie tylko juz pobieranie hasla ktore jest zakodowane w md5 ^^
UPDATE
Jak bedziesz mial login w md5 to jak kogos zalogujesz ^^ ?
Cytat(Puciek @ 2005-02-22 16:11:49)
UPDATE
Jak bedziesz mial login w md5 to jak kogos zalogujesz ^^ ?
moze mniej wiecej takie zapytanie bedziesz wysylal do bazy danych?
SELECT
*
FROM userzy WHERE login = md5('login') AND haslo = md5('haslo')
- jezeli takie zapytanie zwroci wiersze to znaczy ze uzytkownik istnieje...
Puciek
22.02.2005, 15:24:08
hmm
albo zle rozumuije albo on bedzie wtedy w bazie przechowywal uzytkownikow w md5, dobrze rozumuje ?
Cytat(Puciek @ 2005-02-22 16:24:08)
hmm
albo zle rozumuije albo on bedzie wtedy w bazie przechowywal uzytkownikow w md5, dobrze rozumuje ?
ech to... ja namieszalem...
myslalem o zapytaniu tego typu:
SELECT
*
FROM uzytkownicy WHERE md5(login) = '0db2af75179fb9dbe097af182d442a4a';
gdzie '0db2af75179fb9dbe097af182d442a4a' - zhaszowany login pobrany z ciastka
sorry...
hawk
22.02.2005, 15:32:50
Podobno najstarsi górale używają do tego... sesji

.
Jakie to ma znaczenie, czy login/hasło są zaszyfrowane, jeżeli muszę tylko zesniffować cookie i wysłać do serwera? Chociaż dochodzimy tutaj do SSL, bez którego nie ma mowy o bezpieczeństwie.
Login/hasło w cookie są również niebezpieczne z dwóch innych powodów
- nawet zaszyfrowane md5 są do złamania; md5 to już przestarzały algorytm
- na komputerze zostaje cookie z wszystkimi danymi potrzebnymi do włamania się na konto danego usera
Puciek
22.02.2005, 15:38:45
Cytat(hawk @ 2005-02-22 16:32:50)
Podobno najstarsi górale używają do tego... sesji

.
Login/hasło w cookie są również niebezpieczne z dwóch innych powodów
- nawet zaszyfrowane md5 są do złamania; md5 to już przestarzały algorytm
- na komputerze zostaje cookie z wszystkimi danymi potrzebnymi do włamania się na konto danego usera
Wystarczy kilka dni bruteforca na silnej maszynce i po rpoblemie, ale to już inna para kaloszy.
W pelni zgadzam sie co do sesji ale wtedy musialbys logowac na podstawie IP a nie zachowanego cookie ^^
MOniToR
22.02.2005, 17:11:40
hmm może mi ktos powiedziec jak zakodowac text w md5 i potem odkodowac (wiem, len jestem

)? ;> Sesje sa dobre, ale ja che mieć opcje 'loguj automatycznie' aby użytkownicy nie musieli się za każdym razem logowac. A ma ktoś jeszcze jakiś pomysł jezeli md5 nie jest takie bezpieczne ? Robie naprawde spory serwis i musze się dobrze zabezpieczyc.
slash^
22.02.2005, 17:18:59
zakodowanie:
<?php
$txt = \"blablub\";
$zakodowane = md5 ($txt);
?>
md5 to hash - nie odkodujesz tego
a bezpieczeństwo z "loguj automatycznie" + "cookies" -> nie istnieje
ale pomysl o SSL
MOniToR
22.02.2005, 17:35:44
To jak mama sprawdzic czy uzytkownik wpisal dobre haslo jeżeli jego hasło jest zakodowane a ja nie moge tego odkodować ? ;E
Nievinny
22.02.2005, 17:38:41
Sprawdzasz kodując hasło które podał i wersję zakodowaną porównać z zakodowanym z bazy danych
MOniToR
22.02.2005, 19:20:37
Cytat(Nievinny @ 2005-02-22 18:38:41)
Sprawdzasz kodując hasło które podał i wersję zakodowaną porównać z zakodowanym z bazy danych
to jak uzytkownik bedzie mógł się logowac swoim hasłem jeżeli będzie ono zakodowane ?
Yarecki
22.02.2005, 20:32:27
Cytat(Puciek @ 2005-02-22 15:11:49)
Cytat(Yarecki @ 2005-02-22 14:35:17)
Hmm ja bym w ciastku trzymał login i md5( $login . md5( $password ) ).
Toteż jest to logiczne, tu niema samego logowanie tylko juz pobieranie hasla ktore jest zakodowane w md5 ^^
UPDATE
Jak bedziesz mial login w md5 to jak kogos zalogujesz ^^ ?
Chodziło mi o to, że w bazie login jest normalnie zapisany, a hasło zahaszowane.
W ciastku natomiast trzymać tylko login i hash [loginu + hasła] z bazy, lub sam hash [loginu + hasło] z bazy.
W taki sposób można jednoznacznie określić użytkownika, nie podając mu konkretnych danych. Utrudnia to też _trochę_ brute force bo trzeba najpierw rozgryżć ten zlepek [login + haslo] i dopiero wtedy można rozgryzać hasło.
slash^
22.02.2005, 21:28:04
Cytat(MOniToR @ 2005-02-22 19:20:37)
to jak uzytkownik bedzie mógł się logowac swoim hasłem jeżeli będzie ono zakodowane ?
w bazie trzymasz w tabeli:
Kod
id login haslo
1 admin hash
2 user hash
w skrócie: w bazie danych zapisujesz hasla juz zahashowane przez md5.
User logując się wysyła przez formularz do skryptu:
-> $login
-> $haslo
skrypt przerabia haslo na hash w md5
$hashHaslo = md5($haslo)
budujesz zapytanie sql
select * from login where login = $login and haslo = $hashHaslo;
...
goldenlord
22.02.2005, 21:40:34
Jak już się bawisz w to zapamiętywanie czy ktoś się na stałe zalogował czy nie to łatwiej stworzyć sobie jakiś string, dodać go do nazwy usera, potraktować md5 i wstawić do ciastka np.
<?php
$stupid_hash = 'kobyłamamałybok';
$_COOKIE['user_name'] = 'user';
$_COOKIE['user_hash'] = md5 ($user_name . $stupid_hash);
// Po tym jak odwiedza stronę po długim czasie
$new_hash = md5 ($_COOKIE['user_name'] . $stupid_hash); if ($new_hash == $_COOKIE['user_hash'])
{
// Zalogowany
}
?>
Wtedy jak nawet wyedytuje sobie ciastko u siebie na kompie to nic mu to nie da, i masz z głowy ewentualne obciążanie bazy zapytaniami...
MOniToR
23.02.2005, 00:17:21
Ktos chyba nie zrozumiał mojego ostatniego popsta, chodzi mi o to, że uzytkownik nie wpisze w formularzu przecierz zakodowanego hasła tylko swoje, które ustawił. I jak sprawdzic czy to prawdziwe
Kuziu
23.02.2005, 00:23:00
W bazie masz zakodowane przez md5() tak ?
Użytkownik wysyła nie zakodowane tak ?
Porównujesz Hasło z bazy nie kodując go bo już jest zakodowane z md5($haslo) które przyjdzie z formularza.
Czyli w bazie masz zakodowane a to od użytkownika kodujesz w locie
<?php
if($sql_pass == md5($form_pass)){
}
?>
Co za tym idzie porównujesz czy HASH'e sie zgadzają.
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.