Skrypt do bezpiecznego logowania

0

Witam serdecznie,
Znalazłem w internecie ostatnio taki skrypt do bezpiecznego logowania: http://m.wikihow.com/Create-a-Secure-Login-Script-in-PHP-and-MySQL co o nim myślicie? W połączeniu z PDO wyglada chyba ciekawie? Znacie może jakieś ciekawsze rozwiązania?

1

Na pewno nie rozwiązuje to wszystkich możliwych problemów, pierwsze co mi przyszło do głowy: CSRF przy wylogowywaniu. Jest tylko notka:

Note: it might be a good idea to add CSRF protection here in case someone sends a link hidden in this page somehow. For more information about CSRF you could visit Coding Horror.

Czyli jakaś świadomość istnieje, chociaż tyle ;) Ale skoro już wiedzą to mogliby opisać.

Poza tym w kodzie jest błąd:

if ($insert_stmt = $mysqli->prepare("INSERT INTO members (username, email, password, salt) VALUES (?, ?, ?, ?)")) {
            $insert_stmt->bind_param('ssss', $username, $email, $password, $random_salt);
            // Execute the prepared query.
            if (! $insert_stmt->execute()) {
                header('Location: ../error.php?err=Registration failure: INSERT');
            }
        }
        header('Location: ./register_success.php');

Niepowodzenie insertu i tak przekieruje pod register_success, bo jedno Location nadpisze drugie.

Nie ma nic wspomniane nt. niebezpieczeństwa związanego z podawaniem treści przy stosowaniu nagłówka Location (co nie dziwi, skoro popełnili ten błąd).

Dwa pierwsze tematy jakie mi przyszły do głowy i jeden to po prostu lekka wada, a drugi to błąd. Odradzam korzystanie, choć znalezione błędy może nie są tragedią i raczej nie doprowadzą do wypływu informacji. Ale po prostu dalej nie weryfikuję tego kodu, więc może być coś gorszego.

0

A masz może jakieś sprawdzone, "gotowe" rozwiazanie które nie zawiera błędów? :) kurczę, to wydawało mi się dobre ;)

0

Nie rozumiem, z czym problem, skrypt do bezpiecznego logowania?
A jaki skrypt jest niebezpieczny, tylko dziurawy czy bardziej dziurawy może być bezmyślny który jest po prostu wklejony z gotowca?
Żeby być w 100% pewnym trzeba postawić SSL by nie było możliwości sniffowania
Poza tym tworzysz sesje zamiast ciastka
session_start()
oczywiście sama sesja to nie jest 100% bezpieczeństwa najlepiej jest zrobić sesje w sesji i na Wyrażeniach warunkowych stworzyć kolizje której algorytm podparty będzie na kolizji zdarzeń.
Czyli np jak ktoś przechwyci sesje w jakiś sposób, np przez błąd XSS
to wywołanie kolizji w sesji sprawi że ma mniejsze prawdopodobieństwo na zalogowanie się. Co to znaczy
np skrypt będzie porównywał nie tylko ID sesji ale również wersje przeglądarki czy numer IP i wsadzasz jedną sesje w drugą. Nawet jak ktoś spreparuje nagłówek http , to mając inny ip który zapisał się do sesji nie przejdzie procesu logowania. Poza tym otagować funkcją sha256 parametry logowania jak i w bazie trzymać zaszyfrowane hasła, przełączyć opcje cookie set without httponly flag bo domyślnie jest bez flagi.
Dzięki temu nie będzie można odczytać zawartości ciastek. filtruj tagi w skrptach komentarzy i w każdym skrypcie output i zapisywanym do bazy funkcją html_Special_chars . Zawsze oczywiście to można obejść używając kodowania base 64 czy przepuscić do przez filtry parsera, ale byle laik script kiddes na pewno tego nie zrobi

1 użytkowników online, w tym zalogowanych: 0, gości: 1