Skocz do zawartości

[Php] Bezpiecznie logowanie


Markuz

Rekomendowane odpowiedzi

Witam

W jaki sposób zrobić bezpieczne logowanie? oto sposób na logowanie gdzie jesli hasla sie zgadzaja itp. to

 $_SESSION['zalogowany'] = true;

i

 $_SESSION['nick'] = 'jakis tam nick';

Ale przez takie cos mozna wywolac na innej stronce chyba sersje zalogowany = true i wtedy mamy dostep do stronki tak?

Macie pomysły na bezpieczniejsze logowanie? ;)

Odnośnik do komentarza
Udostępnij na innych stronach

a to luz :)

A jest jakieś niebezpieczeństwo w tym kodzie logowania:

<?php
session_start();
include('header.php');
// połączenie się lokalnym serwerem bazy MySQL
$sql_conn = mysql_connect('localhost', 'root', '')
// w przypadku niepowodzenia połączenia zakończ aplikację
or die('Nie mogłem połaczyć się z bazą danych');

// wybieramy bazę danych
mysql_select_db('ns');

if(isset($_SESSION['zalogowany'])) {
echo "Witam, ".$_SESSION['login']; 
}else{

if(isset($_POST['wyslij'])) {


   if(mysql_num_rows(mysql_query("SELECT login, haslo
   FROM test_uzytkownicy WHERE login = '".$_POST['login']."' 
   && haslo = '".$_POST['haslo']."' ")) > 0) {


       if(mysql_num_rows(mysql_query("SELECT id FROM test_uzytkownicy
       WHERE login = '".$_POST['login']."' 
       && haslo = '".$_POST['haslo']."' ")) > 0 ) {


           $_SESSION['zalogowany'] = true;
           $_SESSION['login'] = $_POST['login'];
           $_SESSION['haslo'] = $_POST['haslo'];
           echo "Jesteś zalogowany.";


       } else { 

   echo "Złe hasło, proszę spróbować ponownie";
}
} else { 
   echo "Hasło i login nie pasuja do sebie badz nie ma takiego użytkownika!";
}
} else { 

?>
<form method='POST' action='logowanie.php'>
<b>nazwa uzytkownika:</b> <input type='text' name='login'><br>
<b>haslo:</b> <input type='password' name='haslo'><br>
<input type='submit' value='Wyślij' name='wyslij'>
</form>    

<?php
}
}
?>

 

Oczwyscie oprócz danych do bazy :P

Odnośnik do komentarza
Udostępnij na innych stronach

O zabezpieczeniach dopiero się uczę, ale może się moja informacja przyda. :)

 

Warto zabezpieczać się przed

tzw. SQL Injection w taki sposób:

 

do pobieranych danych z $_POST dodaj:

do liczb intval(zmiena);

do tekstów mysql_real_escape_string(zmienna);

Odnośnik do komentarza
Udostępnij na innych stronach

Ja po prostu robię:

sprintf( "SELECT * FORM users WHERE MD5( name ) = '%s' AND MD5( pass ) = '%s'", md5( $_POST['name'] ), md5( $_POST['pass'] ) );

Wtedy jest zabezpieczone jak trzeba, a użytkownik może sobie wsadzić w nazwę co chce.

 

A do filtrowania inputów proponuję napisać sobie prostą klasę. ;)

Odnośnik do komentarza
Udostępnij na innych stronach

Tymon, gz pomysłowości. Jak wyświetlisz listę użytkowników? :)

 

@Topic: Polecam dodatkowo grupowanie, np.

$_SESSION['UserInfo'] = array( 'Login' => 'Markuz', 'Password' => 'jakassygnaturamd5blablabla', 'innedanetwojegokonta' => 'iich wartosci' );

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Mogą się powtórzyć. Mało prawdopodobne, ale mogą :) W całym ciągu masz 32 znaki 0 -F, tymczasem w ASCII masz 255, a w UTF jeszcze wiecej - wiec moze wyjśc z kilku różnych wyrazów ten sam ciąg. Jeszcze takiego ciągu nie znalazłem, ale podobno są.

Odnośnik do komentarza
Udostępnij na innych stronach

Piczer, radzę ściągnąć dokumentację MySQLa i się douczyć przed wypowiadaniem się na ten temat. ;)

Nie sądzę aby w tym był problem. Za mało się wczytuję w kod - mój błąd :) Myślałem, że to INSERT i... nieważne

 

Właściwie przy INSERcie nie zastosujesz tego tricku. Nie należy on do najszybszych i nie zabezpiecza przed XSS.

Odnośnik do komentarza
Udostępnij na innych stronach

Od tego jest filtrowanie danych wejściowych mój drogi, a hasła i loginu użytkownika raczej nie powinno się filtrować choćby dlatego by nie ograniczać użytkownika w dobrze znaków - czyli zabezpieczeń użytkownika. :)

Odnośnik do komentarza
Udostępnij na innych stronach

  • 8 miesięcy temu...
Tymon, gz pomysłowości. Jak wyświetlisz listę użytkowników? :)

 

@Topic: Polecam dodatkowo grupowanie, np.

$_SESSION['UserInfo'] = array( 'Login' => 'Markuz', 'Password' => 'jakassygnaturamd5blablabla', 'innedanetwojegokonta' => 'iich wartosci' );

 

Wiem, że troche necropostning, ale jak się odwołać teraz np. do loginu?

Musze koniecznie robić

$UserInfo = $_SESSION['UserInfo'];
return $UserInfo['Login']

??

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...