Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Bezpieczenstwo sesji
Forum PHP.pl > Forum > Przedszkole
Spyder
Witam

Mam pytanie odnosnie sesji

  1. <?php
  2. $query = "SELECT email,password FROM users WHERE email='$email' AND password='$password' ";
  3.  
  4. $result = mysql_query($query);
  5.  
  6. if (mysql_num_rows($result) != 1) {
  7. $error = "Bad Login";
  8.    header ("Location: ../index.php");
  9.  
  10. } else {
  11.  
  12.    $_SESSION['sid'] = $email;
  13.    $date = date('d/m/Y G:i:s');
  14.    $update = mysql_query ("UPDATE users SET act_date= '$activity' WHERE email='$email'")
  15.    or DIE(mysql_error());
  16.    header ("Location: ../account.php");
  17.  
  18. }
  19. ?>


mam taka czes kodu do logowania i zaczecia sesji. Moje pytanko jest jak posluguje sie dalej $_SESSION['sid'] to jest to w miare oczywiste i chyba latwo to podejzec. Zastanawiam sie jak zabezpieczys wystartowana sesje dodam ze potrzebuje jakiegos parametru np email lub user id do pobierania wartosci z bazy. Jakies pomysly na bezpieczne sesje.

Dzieki
Lars
Zacznijmy od tego, że nie można łatwo podejrzeć. Dwa - używaj najlepiej ID danego usera.
Pomijam to, że sesje są wystarczająco bezpieczne i opisana przez ciebie sytuacja nie może mieć miejsca (podejrzenie).

Podsumowując - dodaj pole `id` i tym się kieruj. Nie ma mowy żeby ktoś ci to podejrzał, chyba że ma wgląd w system plików.

Pozdrawiam.
Spyder
A cos w stylu ze sesja ma byc wystartowana z tego samego serwera?? Nie ma mozliwosci wyswietlic aktywnych sesji np w mozilli lub programu ktury wylapuje mi aktywne sesje?
Lars
Cytat(Spyder @ 2.10.2008, 14:49:26 ) *
A cos w stylu ze sesja ma byc wystartowana z tego samego serwera??


Bzdura. Jak niby ma wystartować na jednym a działać na drugim?
Twój kod po dodaniu ID będzie wystarczająco bezpieczny.

Pozdrawiam.
Zyx
Nie do końca będzie bezpieczny. Domyślnie sesje PHP nie są w ogóle zabezpieczone przed kradziejstwami itd. - dodaj sobie pole, czy sesja w ogóle została zainicjowana przez Ciebie, a także rejestruj IP i przeglądarkę gościa:

  1. <?php
  2. // Funkcja pomocnicza
  3. function initSession()
  4. {
  5.  $_SESSION['initialized'] = true;
  6.  $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
  7.  $_SESSION['browser'] = $_SERVER['HTTP_USER_AGENT'];
  8. } // end initSession();
  9.  
  10. // Zabezpiecza przed spreparowaniem identyfikatora sesji
  11. if(!$_SESSION['initialized'])
  12. {
  13.   initSession();
  14. }
  15.  
  16. // Zabezpiecza przed wykorzystaniem identyfikatora sesji przez kogos innego
  17. if($_SESSION['ip'] != $_SERVER['REMOTE_ADDR'] || $_SESSION['browser'] != $_SERVER['HTTP_USER_AGENT'])
  18. {
  19.  initSession();
  20. }
  21.  
  22. // Teraz mozna bezpiecznie korzystac z sesji: ladowanie zalogowanego uzytkownika, logowanie i te sprawy
  23. ?>


Na deser lektura: http://phpsec.org/projects/guide/4.html
Spyder
No wlasnie wiedzialem ze cos jest ale nie moglem sie dogrzebac teraz znalazlem to:

http://albi.vxe.pl/sid/14e9a04932c23de45d5...ssion-fixation/

Ogolnie to samo smile.gif dzieki o to mi chodzilo...
bełdzio
jesli Twoje pierwsze $query dziala na zasadzie logowania, to wywal z niego sprawdzanie hasla i rob to spod PHP, dlaczego? a no dla tego ze jak ktos walnie Ci SQL I w "email='$email'" i wrzuci tam komentarz to haslo nie bedzie juz sprawdzana i bedzie mozna sie zalogowac jako kazdy user smile.gif
Spyder
tak ale dane z formy odbieram tak

  1. <?php
  2. $username = htmlspecialchars($_POST['username']);
  3. $password = md5($_POST['password']);
  4. ?>


wiec chyba bezpiecznie ?
topp
Kod
$username = htmlspecialchars($_POST['username']);


Lepiej użyj

Kod
$username = mysql_escape_string($_POST['username']);
// lub
$username = mysql_real_escape_string($_POST['username']);
// lub chociaz
$username = addslashes($_POST['username']);


Htmlspecialchars escejpuje znaki HTMLowe, przy czym do wyescapeowania pojedyńczego cudzysłowa trzeba go specjalnie zmusić przekazująć ENT_QUOTES jako drugi parametr. Nie do tego została ta funkcja napisana. winksmiley.jpg
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.