• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Ocena kodu logowania.

VPS Starter Arubacloud
+2 głosów
223 wizyt
pytanie zadane 16 czerwca 2021 w PHP przez Dziedzic Obywatel (1,180 p.)

Witam, proszę Was o ocenę kodu logowania napisanego przeze mnie w PHP. Jeśli jest coś źle zrobione proszę o napisanie co mógłbym poprawić.

<?php



    session_start();

    $message = "Wszystko OK!";

    $conn = mysqli_connect("host", "nick", "hasło", "nazwa bazy danych");



    if ($conn->connect_error) {

        die($conn->connect_error);

    } else {  

        if (isset($_SESSION['user_id'])) {

            header('Location: user_panel.php');

        } else {  

            if (!empty($_POST["Name"]) && mysqli_real_escape_string($conn, $_POST["Name"]) == $_POST["Name"] || !empty($_POST["Password"]) && mysqli_real_escape_string($conn, $_POST["Name"]) == $_POST["Name"]) {

                $name = $_POST["Name"];

                $sql = "SELECT * FROM `players` WHERE BINARY name = '$name'";

                $results = mysqli_fetch_assoc(mysqli_query($conn, $sql));

                

                if (!($results == null)) {

                    if (count($results) > 0 && password_verify($_POST["Name"], $results["password"])) {

                        $_SESSION["user_id"] = $results["id"];

                        header('Location: user_panel.php');

                    } else {

                        $message = "Nieprawidłowe dane.";

                    }

                } else {

                    $message = "Nieprawidłowe dane.";

                }

            } else {

                $message = "Wszystko OK!";

            }

        }

    }



?>

 

2 odpowiedzi

+6 głosów
odpowiedź 16 czerwca 2021 przez Comandeer Guru (599,730 p.)
wybrane 16 czerwca 2021 przez Dziedzic
 
Najlepsza
  • Skoro stosujesz die, to możesz się pozbyć tego else. Zawsze to jeden poziom zagnieżdżenia mniej, a kod będzie działał tak samo (bo jak wejdzie do ifa z die, to i tak dalej nie pójdzie).
  • Jak już jesteśmy przy tym die – po co userowi techniczne info o błędzie? Takie coś jest przeznaczone dla programisty i powinno trafić do logów, a user powinien po prostu dostać komunikat, ze coś nie działa.
  • Zresztą podobny zabieg można zrobić ze sprawdzaniem S_SESSION. Na dobrą sprawę to sprawdzanie powinieneś zrobić na samym początku, bo do tego Ci nawet połączenie z bazą niepotrzebne. Jak zmienna sesyjna istnieje, to header + die i tyle. Nie potrzeba else.
  • Czemu porównujesz wprowadzone przez usera dane do wyniku przepuszczenia ich przez mysqli_real_escape_string? To mocno ogranicza tak naprawdę bezpieczeństwo hasła, w którym mogą być przeróżne znaki. Pierwsze losowo wygenerowane hasło z generatora haseł online-vx"`%Z2#m2r/&%%. Powinieneś używać prepared statements. Inna rzecz: po co to porównanie robisz dla hasła, skoro go nawet nie umieszczasz w zapytaniu?
  • password_verify chyba powinieneś używać $_POST['Password'] zamiast $_POST['Name'].
  • Przy zastosowaniu tzw. guard clauses całą tę drabinkę ifów można by znacząco uprościć.
+2 głosów
odpowiedź 16 czerwca 2021 przez Wiciorny Ekspert (269,120 p.)

https://pl.wikipedia.org/wiki/SQL_injection

WHERE BINARY name = '$name'";

 

Podobne pytania

+1 głos
1 odpowiedź 675 wizyt
+2 głosów
0 odpowiedzi 212 wizyt
pytanie zadane 10 lutego 2018 w Bezpieczeństwo, hacking przez Hysek Obywatel (1,250 p.)
0 głosów
1 odpowiedź 192 wizyt
pytanie zadane 18 września 2018 w C i C++ przez Zimny. Nowicjusz (140 p.)

92,453 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...