Wysypane logowanie

Odpowiedz Nowy wątek
2019-11-05 14:28
0

Witam, mam dosyc spory problem z logowaniem. Tworze sobie mały projekt. Mam baze danych, rejestracje i index.php na którym jest logowanie. Logowanie jest przez formularz w index.php wysylany POSTem do login.php a nastepnie tam decyduje czy cofa do indexu z błędem czy rusza dalej do zalogowany.php. Po wprowadzeniu błędnych danych wyrzuca błędy, ale po wprowadzeniu poprawnych nie dzieje sie nic, dalej zostaje na indexie, nie zwraca błędów ani nie przenosi dalej.
Tyle czasu się z tym wczoraj męczyłem i nie doszedłem do niczego, dlatego zadaje to pytanie. Gdzie popełniam błąd? Baza to mysql. Hasło do konta wprowadzam na zasadzie przejścia do rejestracji i zhashowane hasło wklejam do tablicy uzytkownicy. Sprawdziłem wszystkie możliwości, nie wiem co jest nie tak. Wielkość liter przy bazie danych jest zachowana odpowiednio.
Jak wprowadzam odpowiedni nick to zwraca drugi błąd, a jak nie ma nicku w bazie to pierwszy - połączenie z bazą i $result->fetch_assoc() raczej jest okej, problem jest przy verify password - tak według mnie, ale jak go ugryźć nie mam pojęcia.

INDEX.PHP

<?php

    session_start();

    if ((isset($_SESSION['zalogowany'])) && ($_SESSION['zalogowany']==true))
    {
        header('Location: zalogowany.php');
        exit();
    }

?>
<!DOCTYPE html>

<html>
    <head>
        <meta charset="UTF-8">
        <title>Formularz rejestracji</title>

    </head>
    <body>

        <div id=tytul>Logowanie i rejestracja<br/><br/></div>

        <a href="rejestracja.php">Rejestracja - załóż konto</a>
        <br/> <br/>

        <form action="login.php" method="POST">
            Login:<br/> <input type="text" name="login"/> <br/>
            Hasło:<br/> <input type="password" name="haslo"/> <br/> <br/>
            <input type="submit" value="Zaloguj"/>

        </form>

<?php
if(isset($_SESSION['blad']))    echo $_SESSION['blad'];
?>

    </body>
</html>

LOGIN.PHP

<?php

    session_start();

    if ((!isset($_POST['login'])) || (!isset($_POST['haslo'])))
    {
        header('Location: index.php');
        exit();
    }

require_once "database.php";

$conn = new mysqli($host, $user, $password, $db_name);

if ($conn->connect_errno!=0)
{
echo "Error: ".$conn->connect_errno;
}

else
{
$login = $_POST['login'];
$haslo = $_POST['haslo'];

$login = htmlentities($login, ENT_QUOTES, "UTF-8");

if ($result = $conn->query(
    sprintf("SELECT * FROM uzytkownicy WHERE NICK='%s'",
    mysqli_real_escape_string($conn, $login))))
{
    $ilu_userow = $result->num_rows;
    if ($ilu_userow>0)
    {
        $wiersz = $result->fetch_assoc();
        if (password_verify($haslo, $wiersz['HASLO']))
        {                
            $_SESSION['zalogowany'] = true;

            unset($_SESSION['blad']);
            $result->close();
            header('Location: zalogowany.php');
        }
        else {      
        $_SESSION['blad'] = '<p>Nieprawidłowy login albo haslo</p>';
        header('Location: index.php');
    }    

        }
    else {      
        $_SESSION['blad'] = '<p>Nieprawidłowy login albo haslo, wariant 2</p>';
        header('Location: index.php');
    }
    }
$conn->close();
}
?>
edytowany 1x, ostatnio: 4michal, 2019-11-05 14:30

Pozostało 580 znaków

2019-11-05 15:27
0

Ja swego czasu wrzucałem paczkę z logowaniem w php tu na forum, tylko nie pamiętam w którym temacie, a nie chce mi się szukać :)


Pozostało 580 znaków

2019-11-05 15:39
0

@4michal: skoro uważasz, że problem leży w password_verify to może źle jest to hasło zapisywane? Pokaż plik rejestracji.

Pozostało 580 znaków

2019-11-05 15:45
0

Wszystko się rozchodzi właśnie o ten kod.. bo podobne paczki znalazłem, poedytowałem pod siebie i nowe rozwiązanie śmiga jak szalone.
Boli mnie, że nie mogę sobie z tym poradzić i męczy mnie to straszliwie,bo już dużo za dużo czasu na to straciłem a dalej jestem w punkcie zero.
Odpalenie drugiego projektu od strzała 10 razy szybciej niż tego nie dało takiej satysfakcji jakbym to naprawił :)

Pozostało 580 znaków

2019-11-05 15:51
1

Wyszukaj sobie przykłady gdzie masz walidacje danych od frontu i backendu, hashowanie hasła minimum sha256 i wyżej itp. to co masz jest mocno "robocze" ;)


Pozostało 580 znaków

2019-11-05 15:51
0
leonpro778 napisał(a):

@4michal: skoro uważasz, że problem leży w password_verify to może źle jest to hasło zapisywane? Pokaż plik rejestracji.

rejestracja jeszcze nie wrzuca nic do bazy, wpisuje hasło a potem zwraca mi hash hasła, które umieszczam w bazie.
Na tej podstawie zrobiłem logowanie, które nie działa..
Testowałem takie rozwiązanie na działających projektach i tam działa <zły>

Haslo: <input type="password" name='pass'><br/><br/>
             <?php 
            if (isset($_SESSION['e_pass'])){
              echo '<div class="error">' .$_SESSION['e_pass'].' </div>';
              unset($_SESSION['e_pass']);
            }
            ?>
.
.
.

$pass_hash = password_hash($pass, PASSWORD_DEFAULT);

    // generowanie hasla
    echo $pass_hash; exit();

Pozostało 580 znaków

2019-11-05 18:24
2

Moim zdaniem problem leży w zapisywaniu haseł do bazy. Ponieważ robisz to poprzez kopiuj + wklej (raczej nie będzie się Tobie chciało przepisywać znak po znaku hasowanego hasła) to tylko tutaj może być problem. Zrób sobie skrypt na sprawdzenie:

<?php
   $pass = 'password'; // tutaj wstaw hasło jakim próbujesz się zalogować
   $hash = 'blablabla'; // tutaj SKOPIUJ hasło z bazy danych w postaci hash
   if (password_verify($pass, $hash)) { echo 'OK'; }
?>

i zobacz czy pójdzie

Pozostało 580 znaków

2019-11-05 20:57
0
leonpro778 napisał(a):

Moim zdaniem problem leży w zapisywaniu haseł do bazy. Ponieważ robisz to poprzez kopiuj + wklej (raczej nie będzie się Tobie chciało przepisywać znak po znaku hasowanego hasła) to tylko tutaj może być problem. Zrób sobie skrypt na sprawdzenie:

<?php
   $pass = 'password'; // tutaj wstaw hasło jakim próbujesz się zalogować
   $hash = 'blablabla'; // tutaj SKOPIUJ hasło z bazy danych w postaci hash
   if (password_verify($pass, $hash)) { echo 'OK'; }
?>

i zobacz czy pójdzie

dzięki za podpowiedź. zrobiłem i.. działa, zwróciło OK.
przeciez to jest w takim razie nie możliwe

Pozostało 580 znaków

2019-11-06 05:22
0

No, to teraz do $hash spróbuj wczytać hasło z bazy danych a login wpisz z "palca" :-)

P.s. Możesz pokazać bazę danych z rekordem tego użytkownika?

edytowany 1x, ostatnio: leonpro778, 2019-11-06 05:24

Pozostało 580 znaków

2019-11-06 06:32
1

Prawdooidobnie w tabeli jest ustawione zbyt maly/za krótki VARCHAR. Ustaw na chocby 100 i sprawdz. Usun te tabele i ustaw na nowo. Jesli pole na haslo jest za krótkie a hash jest dluzszy to ucina haslo i osadza maksymalna dlugosc tego pola. Zamiast "statatata" bedzie "sratat"

edytowany 1x, ostatnio: marchewa, 2019-11-06 06:38

Pozostało 580 znaków

2019-11-06 07:44
1

No ale jeżeli skopiował tego hasha z bazy danych i wkleił do tego skryptu sprawdzającego to znaczy, że hasło jest tam dobre :)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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