Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] href, zmienne post, sesje, bezpieczeństwo
Forum PHP.pl > Forum > Przedszkole
Sky_walker
Pisze prosty, ale i (staram się) bezpieczny system logowania. Wszystkie zmienne staram się gromadzić w sesjach, ale mam mały problem:
tworze plik rozpoczynający sesje i wkładający do niej zmienne (np. $_SESSION [ 'test' ] = "blablabla";), potem mam zwykły link (<a href=\"test.php\"> link</a>) który prowadzi do strony wyświetlającej 'test' z sesji ($test=$_SESSION ['test']; echo "test=$test";).
Z tego co wyczytałem to należy ID sesji albo w Cookie albo GET'em.
Obie metody są do bani (chyba sad.gif ) gdyż spora część user'ów ma wyłączoną obsługę ciastek, a zmienne get można wklepywać samemu - i w ten sposób sporo namieszać na stronie (no i jak zamkniemy przeglądarkę i ponownie wklepiemy poprawny link to strona otworzy się jakby nigdy nic worriedsmiley.gif ).
Zastanawiałem się, czy w jakiś sposób nie da się przesyłać identyfikatora sesji w formie POST - tak jak to robią formularze, tylko za pomocą zwykłych href'ów. A może da się przyporządkować sesje do czegoś innego o czym nie wiem?
Cysiaczek
Wbudowane sesje w php bedą się starały zawsze przekazać. Niekiedy dzieje się to przez formularze poprzez pola hidden. Mozesz sobie też coś takiego zrobić ręcznie.
Sky_walker
Zawsze? to może ja coś źle robie...
kod strony:
  1. <?php
  2. $string = crypt(rand());
  3. $sessionid = md5($string);
  4. $_SESSION [ 'SID' ] = $sessionid;
  5. $id=$_SESSION ['SID'];
  6. echo "sesid=$id";
  7. echo "<a href="test.php"> link</a>";
  8. ?>

i kod drugiej strony (test.php)
  1. <?php
  2. $id=$_SESSION ['SID'];
  3. echo "id=$id";
  4. ?>

$sessionid to losowa wartość, przekazujemy ją do test.php - u mnie nie działa :/
gebp
Ja zrobiłem to tak. Plik index gdzie jest zwykły formularz który przesa POST'em do pliku
log.php
  1. <?php
  2. if ( (empty($_SESSION['user'])) AND (empty($_SESSION['pass']) ) )
  3. { if ( (empty($_POST['login'])) AND (empty($_POST['pass'])) )
  4.  {header('location:index.html');
  5. exit();
  6. }
  7.  
  8. $n=$_SESSION['user']= $_POST['login'];
  9. $_SESSION['pass']= $_POST['pass'];
  10.  
  11. @$a=mysql_connect("****","****","****");
  12. @$b=mysql_select_db(ahb);
  13.  if (!$a OR !$b)
  14.  {Echo("<div aligne-=center>Błąd połączenia z bazą w celu weryfikacji.</br>
  15.  Spróbuj później. Powaiadom administratora</div>");
  16.  exit();}
  17.  
  18.  $s1 = "SELECT * FROM `baza` WHERE `nazwa` LIKE '$n' ";
  19.  $w= mysql_query($s1);
  20.  $w1=mysql_fetch_array($w);
  21.  $pnazwa= $w1['nazwa'];
  22.  $ppass=$w1['pass'];
  23.  
  24. if ( ($_SESSION['user'] === $pnazwa) AND ($_SESSION['pass'] === $ppass) )
  25. {$_SESSION['autuser']=1;
  26.  $_SESSION['iduser']=$w1['ID'];
  27. header('location:index2.php');
  28. exit();}
  29. else {
  30. echo ('
  31. <TABLE>
  32. <TR><TD><p>Niepoprawny login lub hasło --> <font color="#FF0000"><b> ACESS DENIDED</b></font></p>
  33. </TD></TR></br>
  34. <TR><TD><a href=index.html> LOGOWANIE </a></TD></TR>
  35. </TABLE></BR>');
  36. exit();}
  37. }
  38. ?>


A potem na początku każdego pliku który ma być zabezpieczony:
  1. <?php
  2. if ( (!isset($_SESSION['user'])) AND (!isset($_SESSION['pass'])) )
  3. { echo('<a href=index.html > LOGOWANIE </a>');
  4. exit();}
  5. ?>


Oczywiście jest to oparte o baze MySql. Można także na plikach po modyfikacjach.
Sky_walker
DZIAŁA biggrin.gif
wielkie dzięki
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.