Autor Zpráva
Delegal
Profil
Dobrý den, nedávno jsem si stáhl jaký si webový redakční systém, no a v kodech nikde nevidím session_start(); , a tak podobně...
Jediné co připomína kontrolů přihlášení je tohle: (v index.php)
if(isset($_COOKIE['username']) && isset($_COOKIE['password'])) {
    
    if(loginCheck($_COOKIE['username'], $_COOKIE['password'])) {
    
    $data = loginCheck($_COOKIE['username'], $_COOKIE['password']);
------------------------------------------------------------------------------------------------------
a v jiných souborech jako třeba "messages.php" je tohle:

if(loginCheck($_COOKIE['username'], $_COOKIE['password'])) {
------------------------------------------------------------------------------------------------------

no a soubor functions.php (tedy loginCheck) obsahuje tohle:
function loginCheck($username, $password) {
    $query = sprintf('SELECT * from users where username = "%s" and password ="%s"', mysql_real_escape_string(strtolower($username)), mysql_real_escape_string($password));
    if(mysql_fetch_row(mysql_query($query))) {
        $result = mysql_fetch_row(mysql_query($query));
        $out['true'] = true;
        $out['id'] = $result[0];
        $out['user'] = $result[1];
        $out['mail'] = $result[3];
        $out['image'] = $result[12];
        $out['background'] = $result[15];
        return $out;
    } else {
        return false;
    }
}
------------------------------------------------------------------------------------------------------

Pak ještě celý přihlašovací kod php je tohle:
    if(isset($_POST['login'])) {
        $username = $_POST['username'];
        $password = md5($_POST['password']);
        
        setcookie("username", str_replace(' ', '', strtolower($username)), $time);
        setcookie("password", $password, $time);

        if(loginCheck($_POST['username'], md5($_POST['password']))) {
            header("Location: ".$confUrl."/index.php?page=welcome");
        } else {
            $TMPL['message'] = '<div class="divider"></div>
                                <div class="notification-box notification-box-error">
                                <h5>Error!</h5>
                                <p>Error with login!</p>
                                <a href="#" class="notification-close notification-close-error">x</a>
                                </div>';
        }
    }
------------------------------------------------------------------------------------------------------
Chci se proto zeptat jestli je to dobře, a jestli je jisté, že se žádny hacker přes tohle nedostane. (Nebo další svinstvo)
Děkuji :)
Rfilip
Profil
Tento kod ma jednu velkou vadu, stačí se dostat pomocí XSS k cookie a pomocí rošíření pro Chrome "Edit this cookie" či jiného cookie manažera si ji do prohlížeče vložit a do změny hesla je pořád přihlášený. Tento způsob se nazývá session hijacking.
juriad
Profil
Rfilip:
Ten samý problém je i při klasickém přihlášení přes PHP SESSION, tam se do Cookie ukládá SESSION ID.

Nebezpečí tkví v tom, že po síti běhá potenciálně nebezpečná informace: MD5(password). MD5 není super bezpečná hashovací funkce a navíc, pokud autor šetří solí (provede MD5 přímo nad heslem, aniž by něco málo přihodil), tak lze spoustu slabých hesel odhalit pomocí předpočítaných tabulek, kterých se všude povalují tuny.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: