Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wasze metody autoryzacji...
Forum PHP.pl > Forum > PHP
joebezucha
Czesc,

Interesuje mnie jakie metody autoryzacji uzytkownika stosujecie w swoich programach. Bezpieczna metoda powinna uniemożliwiac ataki brute force (i inteligentniejsze jego odmiany wykorzystujące fakt prawdopodobiensto wystapienia wybranych znakow w zaleznosci od języka itp) i słownikowy. Powinna tez przechowywac haslo w postaci niejawnej w bazie danych.

Wybrane metody:
1)hasło zapisane w bazie danych zostaje wczesniej uzupełnione o prefix i zakodowane algorytmem haszującym (np. SHA256 lub SHA512). Prefix znacznie utrudni atak słownikowy. Zabezpieczeniem przed brute force może być blokada możliwości autoryzacji na X minut po Y nieudanych próbach na poprawny login (globalnie lub tylko z „atakującego IP”).
Zalety:
- Przyjazne dla użytkownika – posługuje się tylko jednym hasłem.

2)hasło może być zaszyfrowane algorytmem wymagającym sekretnego klucza (np. algorytm Rijndael 128bit), który użytkownik musi podać ręcznie lub z pliku wraz ze swoim hasłem.
Wady:
- Mało przyjazne dla użytkownika – konieczność pamiętania hasła i klucza.

3)Użytkownik może być przy logowaniu proszony o podanie tylko losowo wybranych znaków hasła. Widzę dwie opcje realizacji takiej metody. Pierwsza bardzo prosta do wykonania gdy hasło jest zapisane w bazie w postaci jawnej. Druga to zapisanie w bazie danych wszystkich k-elementowych kombinacji n-elementowego hasła w postaci zahaszowanej.
Wady:
- W przypadku pierwszym: jawna postać hasła w bazie danych.
- W przypadku drugim: bardzo duże obciążenie bazy danych (przez jednego użytkownika):

k n kombinacje bez powtórzeń
5 10 252
5 15 3003
5 20 15504

Jakich metod Wy używacie?questionmark.gif
Ludvik
Pierwsza metoda jest raczej niezawodna. Najsłabszym ogniwem jak zawsze jest człowiek, więc ile byś się nie namęczył, to i tak głupi użytkownik będzie miał hasło łatwe do złamania. Można z tym walczyć, ale nie wiem czy to opłacalne.

Drugi niewygodny i wcale niedużo bezpieczniejszy.

Trzeci sposób zabije bazę, a razem z nią użytkownika, który będzie literował hasło przed wpisaniem. A jeżeli nie zabije bazy, to przy włamaniu haseł nawet nie trzeba będzie odkodować...
Balon
Zależy do czego winksmiley.jpg Jeśli nie myślisz o banku internetowym tongue.gif, przechowywaniu haseł online to najlepiej skorzystaj z biblioteki Auth z PEAR.
joebezucha
Tez peirwsza opcja wydaje mi sie najwygodniejsza i dostatecznie skuteczna do wiekszosci zastosowań. Ale ciekawi mnie wlasnie jak dziala system autoryzacji do banków gdzie uzytkownik podaje wybrane litery hasła.
Pomijajac aspekt wygody uzytkownika.
Np. w banku ING podaje sie 5znaków z max 32 (exclamation.gif!) Jesli jest to robione tak jak opisalem z zapisem zahaszowanych wszystkich kombinacji do bazy danych to w najgorszym przypadku byloby tego ponad 200tys wpisow dla jednego uzytkownika...srednio pewnie pewnie wiekszosci uzytkownikow ma hasla max 12 znakowe wiec to "tylko" takich 1000 kombinacji. Nie wyobrazam sobie natomiast zeby hasla byly w postaci jawnej.

Jakies pomysly jak to dziala? smile.gif
Darti
Może w ING jest tak, że szyfrują każdy znak całego hasła oddzielnie albo parami ? To zmniejszało by ilość kombinacji...

edit:
trochę bez sensu jednak by to było smile.gif
joebezucha
hehe Darti dzieki za oswiecenie:)

Faktycznie najlepsza metoda to zapisywac w bazie kazdy znak w postaci zahaszowanej z dodanym prefixem innym dla kazdego kolejnego znaku hasla tak aby uniemozliwic odgadniecie skrutu (z jednej litery byloby to zbyt proste) i prefixu (gdyby byl jeden i ten sam)

no to chyba koniec tego tematu chyba ze ktos ma jeszcze jakies uwagii
gWd
Cytat(joebezucha @ 23.05.2007, 09:48:09 ) *
1)hasło zapisane w bazie danych zostaje wczesniej uzupełnione o prefix i zakodowane algorytmem haszującym (np. SHA256 lub SHA512). Prefix znacznie utrudni atak słownikowy.

W jaki sposób prafix ma zabezpieczyć przed metodą słownikową? Przecież interfejs użytkownika i tak zawsze ten prefiks doda. No chyba, że potencjalny włamywacz ma dostęp do bazy i Tobie zależy tylko na utrudnieniu rozkodowania haseł. W standardowych rozwiązaniach prefix jest całkowicie zbędny.
Ludvik
Prefix dobrze chroni przed atakiem słownikowym na ukradzione ciastko. Jeżeli chcesz przenosić dane użytkownika między sesjami, to musisz zapisać w ciastku jego login i hasło. Hasło zapisujesz oczywiście zahashowane. Prefiks nie wyjdzie poza obręb serwera, więc włamywacz nie dowie się o nim i będzie próbował zwykłego słownika, a to mu chyba nie wyjdzie...
sp_
Cytat(gWd @ 1.06.2007, 23:04:33 ) *
No chyba, że potencjalny włamywacz ma dostęp do bazy i Tobie zależy tylko na utrudnieniu rozkodowania haseł.


Gdybym był 'włamywaczem' i miał dostęp do bazy, to dałbym sobie spokój z rozkodowywaniem haseł winksmiley.jpg
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.