[PHP] Logowanie [Zabezpieczenia]

Reptile ReX

Użytkownik
Dołączył
Maj 15, 2007
Posty
248
Witam chciałbym zapytać czy mój poniższy kod na logowanie jest bezpieczny, jeżeli nie, prosiłbym o pomoc w zabezpieczeniu go.
Podejrzewam luki w sesjach, ale proszę was o pomoc.

PS: Oczywiście katalog z plikami .txt jest zabezpieczony przez serwer + .htaccess

PHP:
<?php 
    if (isset($_SESSION['logon'])) {
        $NazwaPliku = "xxx\cxx.txt";   
        $Otworz = fopen($NazwaPliku,"r");
        $Odczyt = fread($Otworz,filesize($NazwaPliku));
        echo("<br /><center><form action='downloads/xxx.exe'><input type='submit' value='--->>> Pobierz Serwer <<<---' class='submit' /></form></center>");
        echo("<br /><center><form action='delete.php'><input type='submit' value='--->>> Skasuj Logi <<<---' class='submit' /></form></center>");
        echo("<br /><center><a href='?logout=yes'>--->>> Wyloguj Się <<<---</a></center>");
        echo("<br /><br />".nl2br($Odczyt)."<br />");
        
        if ($_GET['logout'] == 'yes') {
            
            session_destroy();
            header('Location: index.php');
            }
        } else {
            
            if (isset($_POST['logme'])) {
                
    if (strip_tags(htmlspecialchars($_POST["nick"], ENT_QUOTES)) == "ReptileReX" and strip_tags(htmlspecialchars($_POST["X09261x"], ENT_QUOTES)) == "abc123") {
       
       $_SESSION['logon'] = strip_tags(htmlspecialchars($_POST["nick"], ENT_QUOTES));
       header('Location: index.php');

    } else {
        
        Echo("<center>Podane dane są nieprawidłowe.</center>");
    }

            } else {
                
                echo ("<center><form action='' method='post'>");
                echo ("Nazwa: <input type=\"text\" class=\"input\" name=\"nick\" size=\"25\" /><br />");
                echo ("Hasło:   <input type=\"password\" name=\"X09261x\" class=\"input\" size=\"25\" /><br /><br />");
                echo ("<input type=\"submit\" value=\"Zaloguj Mnie !\" name=\"logme\" class=\"submit\" />");
                echo ("</form></center>");
                
            }
        }
    
?>
 

widmo17

Były Moderator
Dołączył
Lipiec 16, 2007
Posty
1089
Wydaje się być `sekjur`, ale dziwi mnie to:
strip_tags(htmlspecialchars($_POST["nick"], ENT_QUOTES))
Paranoja paranoją, ale to jest porównanie tekstu... ; d Po za tym, po co wycinać tagi ze stringa, w którym już i tak wszystkie `<` i `>` są pozamieniane na odpowiedniki `<` i `>`?
 

loganek

Były Moderator
Dołączył
Listopad 11, 2006
Posty
563
skrypt nie jest bezpieczny, zmienną sesyjną można edytować, jeśli ma się konto na tym serwerze co twoja strona
 

nowy_me

Użytkownik
Dołączył
Luty 7, 2007
Posty
451
loagnek, zakładając że możemy modyfikować sesje to nic nie jest bezpieczne(chyba żeby np. szyfrować zmienne sesji algorytmem AES, ale obawiam się że jak serwer nie zabezpiecza sesji to pliki są podobnie chronione i uda się znaleźć klucz szyfrujący), co to konta na tym samym serwerze to na darmowych hostingach czasami tak jest że ma się wspólny katalog sesji, ale na wszystkich płatnych i na cześć darmowych serwerów dostajesz wirtualny serwer(i każda strona ma swój własny katalog z sesjami użytkowników)
 
Ostatnia edycja:

loganek

Były Moderator
Dołączył
Listopad 11, 2006
Posty
563
nowy_me, dla czego twierdzisz ze nie da sie zabezpieczyc przed zatruwaniem sesji? jest na to co najmniej kilka prostych sposobów...
 

kurde-death

Użytkownik
Dołączył
Listopad 14, 2010
Posty
2
po pierwsze jak już zwrócił uwagę @widmo17 nie porównuj tekstu lepszym rozwiązaniem będzie jak porównasz sumy sha1 czy sha-224, sha-256 itd..

Druga uwaga nie wiem czy korzystasz z funkcji regeneracji id sesji, ale tak czy siak powinieneś.

Trzecia uwaga dobrze by było abyś jeszcze domknął sesje.
 

FiFU

Użytkownik
Dołączył
Maj 30, 2010
Posty
2
nowy_me, dla czego twierdzisz ze nie da sie zabezpieczyc przed zatruwaniem sesji? jest na to co najmniej kilka prostych sposobów...

Np. przy logowaniu można wrzucać do bazy session_id przypisanym do nicku użytkownika, jeśli session_id się zmieni automatycznie możemy zrobić session_destroy();
 

loganek

Były Moderator
Dołączył
Listopad 11, 2006
Posty
563
Np. przy logowaniu można wrzucać do bazy session_id przypisanym do nicku użytkownika, jeśli session_id się zmieni automatycznie możemy zrobić session_destroy();
między innymi :) można też w sesji zapisywać md5($login.$haslo) i sprawdzac( w zasadzie to podobne rozwiązanie do Twojego, tyle że nie trzeba tworzyć dodatkowego pola w bazie)
 
Do góry Bottom