Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Logowanie do mysql i kodowanie
Forum PHP.pl > Forum > Przedszkole
Astronovi
witam, mam takie dwa problemy

1) piszę sobie portal z logowaniem
łączę się z bazą w której bedą uzytkownicy, dane itp..itd...
padają "magiczne" plecenia dostępu do bazy i tu mam problem

polecenie mysql_connect('serwer', 'user', 'hasło');
jest w jakimś pliku php np. połączenie.php, który jest widoczny z poziomu przeglądarki
a więc każdy kto trochę się zna może mi taki plik ściągnąć,podejrzeć i po mojej bazie z użytkownikami

jak to zabezpieczyć?
jak to robicie?


2) hasła uzytkowników powinny być zabezpieczone
chcę by to było zabezpiecznie z kodem blowish

w manualu php crypt jest dosyć trudno napisane o blowish
nie wiem gdzie to salt umieścić a gdzie nie,
z md5 nie ma problemu po prostu pisze się $zakodowane_hasło = md5($haslo);
podobne z crypt() - po prostu crypt($hasło)

czy ktoś może mi podać konkretny przykład z tym blowishem?











Daiquiri
Dostęp możesz zabezpieczyć korzystając z htaccess, "wyrzucając" plik poza public_html lub warunkiem "podglądu" np. defined('COSTAM') or die();
nospor
Cytat
polecenie mysql_connect('serwer', 'user', 'hasło');
jest w jakimś pliku php np. połączenie.php, który jest widoczny z poziomu przeglądarki
a więc każdy kto trochę się zna może mi taki plik ściągnąć,podejrzeć i po mojej bazie z użytkownikami
Plików php się nie ściąga. Pliki php się wykonuje i w przeglądarce można zobaczyć tylko wynik wykonania takiego pliku a nie jego zawartość.

Co nie zmienia faktu ze Daiquiri dobrze prawi
Astronovi
dzięki,

może jeszcze ktoś napisze coś o tym kodowaniu
:-)
drPayton
Cytat(Astronovi @ 14.06.2011, 11:53:21 ) *
(...)
z md5 nie ma problemu po prostu pisze się $zakodowane_hasło = md5($haslo);
podobne z crypt() - po prostu crypt($hasło)
(...)

Mylisz się, takie rozwiązanie jest problemem. Rozwiązaniem jest właśnie "sól" + algorytm hashujący. Od biedy może być i md5.

W bazie wówczas trzymać musisz dwie informacje: sól (jakiś losowy string) + string, będący efektem hashowania "hasło+sól"). Najwygodniej chyba w 2 oddzielnych kolumnach.

Wtedy:
1. Wpisanie hasła użytkownika (przy dodaniu nowego, czy edycji hasła starego):
- generujesz sól (losowy string np 20 znaków), robisz hash(sól.hasło_użytkownika) [np md5, sha1 etc]. Sól zapisujesz do kolumny "sól", hash do kolumny "hasło"

2. Sprawdzenie poprawności danych logowania:
a. sprawdzasz, czy istnieje user o podanym loginie. Jeśli tak - pobierasz jego "sól", łączysz z podanym przez niego hasłem i hashujesz - ten hash porównujesz z tym zapisanym w bazie.

to wszystko smile.gif
Astronovi
Cytat(drPayton @ 14.06.2011, 14:51:30 ) *
to wszystko smile.gif


ok, rozumiem że chodzi o komplikacje kodu
drPayton
nie o komplikacje kodu, ale o zabezpieczenie hasła przed atakami typu słownikowego / rainbow tables. Metoda z solą jest skutecznym zabezpieczeniem przed tym.

A algorytm hashujący - tu ma znaczenie jego podatność na kolizje. MD5 jest już dawno skompromitowany, sha1 o ile dobrze kojarzę też. Ja osobiście używam i polecam sha256, chociaż zapewne to przegięcie w druga stronę wink.gif
Astronovi
ok, napisałem

$pass = 'haslo';
$base64="./0123456789ABCDEFGHIJKLMNOPRSTUVWXYZabcdefghijklmnoprstuvwxyz";


$prefix = "$2a$";
$twodigit = rand(4, 31);
if($twodigit<10)
{
$twodigit = str_pad($twodigit, 2, 0, STR_PAD_LEFT);
}

$blowfish = $prefix.$twodigit."$".substr(str_shuffle($base64), 0, 22)."
$zakodowane = crypt($pass, $blowfish);

takie coś może byc?
:-)


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.