Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL]Logowanie do mysql i kodowanie, Zabezpiecznie dostępu do bazy z przeglądarki
Astronovi
post
Post #1





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 14.06.2011

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


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?











Go to the top of the page
+Quote Post
Daiquiri
post
Post #2





Grupa: Administratorzy
Postów: 1 552
Pomógł: 211
Dołączył: 7.07.2009
Skąd: NJ




Dostęp możesz zabezpieczyć korzystając z htaccess, "wyrzucając" plik poza public_html lub warunkiem "podglądu" np. defined('COSTAM') or die();
Go to the top of the page
+Quote Post
nospor
post
Post #3





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Astronovi
post
Post #4





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 14.06.2011

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


dzięki,

może jeszcze ktoś napisze coś o tym kodowaniu
:-)
Go to the top of the page
+Quote Post
drPayton
post
Post #5





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

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


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
Go to the top of the page
+Quote Post
Astronovi
post
Post #6





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 14.06.2011

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


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


ok, rozumiem że chodzi o komplikacje kodu


Ten post edytował Astronovi 14.06.2011, 18:04:39
Go to the top of the page
+Quote Post
drPayton
post
Post #7





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

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


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

Ten post edytował drPayton 14.06.2011, 18:41:13
Go to the top of the page
+Quote Post
Astronovi
post
Post #8





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 14.06.2011

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


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?
:-)




Ten post edytował Astronovi 14.06.2011, 19:34:03
Go to the top of the page
+Quote Post

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 Aktualny czas: 21.08.2025 - 07:41