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

Ocena kodu logowania.

Object Storage Arubacloud
+2 głosów
227 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 (601,450 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 (270,170 p.)

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

WHERE BINARY name = '$name'";

 

Podobne pytania

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

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...