Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php + mysql] logowanie/wylogowanie
Forum PHP.pl > Inne > Oceny
prz3m3k
Logowanie do panelu newsów w którym to panelu w pełni edytujemy newsy dodajemy/usuwamy itd. nie to jest ważne... wazne jest to czy chodź trochę bezpiecznie się to odbywa tongue.gif w php piszę od niedawna i jest mój pierwszy skrypt zamieszczony do oceny, proszę krytykować do woli smile.gif


plik login.php ma za zadanie sprawdzenie czy login i hasło podane w formularzu logowania zgadzają się z loginem i hasłem w bazie mysql.
  1. <?php
  2. if(!session_id())
  3. { 
  4.  unset($_COOKIE[session_name()]);
  5. }
  6. error_reporting( E_ALL );
  7.  
  8. if(isset($_POST['login']) && isset($_POST['haslo']))
  9. {
  10.  
  11. $login = $_POST['login'];
  12. $haslo = $_POST['haslo'];
  13.  
  14. $db = mysql_connect('host', 'login', 'haslo')
  15. or die('Nie mogę połączyć się z bazą danych'.mysql_error());
  16. or die('Nie mogę połączyć się z bazą danych'.mysql_error());
  17.  
  18. $passwd = md5(sha1($haslo));  /*zakodowanie hasła*/
  19.  
  20. $zapytanie = "SELECT * FROM users WHERE user='$login' AND passwd='$passwd'";
  21. $wynik = mysql_query($zapytanie);
  22.  
  23. $query = "SELECT passwd FROM users WHERE user='$login'";
  24.  
  25. if($r['passwd'] === $passwd){
  26. if(mysql_num_rows($wynik) == 1)
  27. {
  28. $_SESSION['prawid_uzyt'] = $login.session_id();  
  29. $_SESSION['prawid'] = $login;
  30. }
  31. else echo '<center>!!! Błędne logowanie !!!</center>';
  32. }
  33. else echo '<center>!!! Błędne logowanie !!!</center>';
  34. mysql_close($db) or die('Nie mogę się rozłączyć z bazą danych !'.mysql_error());
  35. }
  36. ?>
  37.  
  38. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  39. <html xmlns="http://www.w3.org/1999/xhtml">
  40. <head>
  41. <meta http-equiv="content-type" content="text/html; charset=iso-8859-2" />
  42. <meta http-equiv="reply-to" content="" />
  43. <meta name="generator" content="" />
  44. <meta name="author" content="" />
  45. <meta name="description" content="" />
  46. <title>..:: Logowanie do newsów ::..</title>
  47.  
  48. <STYLE TYPE="text/css">
  49. <!--
  50. body { font-family: verdana; font-weight: normal; font-size: 10pt; color: #00000; margin: 0px; padding: 0px; }
  51. a:link { color: #603913; text-decoration: none; }
  52. a:visited { color: #603913; text-decoration: none; }
  53. a:hover { text-decoration: underline; }
  54. -->
  55. </STYLE>
  56. </head>
  57. <body>
  58.  
  59. <?php
  60. if(isset($_SESSION['prawid_uzyt']))
  61. {
  62. header('Location: panel.php?sid='.session_id().'&la=pl');
  63. }
  64. else
  65. {
  66. if(isset($login))
  67. {
  68. echo '<center>!!! Zalogowanie niemożliwe !!!</center>';
  69. }
  70.  
  71. echo '<br /><br /><center><h3><b>Logowanie do systemu newsów</b></h3></center><br /><br /><br /><br />';
  72. echo '<form method="post" action="login.php">';
  73. echo '<table border="0" align="center">';
  74. echo '<tr><td>Login:</td>';
  75. echo '<td align="center"><input type="text" name="login"></td></tr>';
  76. echo '<tr><td>Hasło:</td>';
  77. echo '<td align="center"><input type="password" name="haslo"></td></tr>';
  78. echo '<tr><td colspan="2" align="center">';
  79. echo '<input type="submit" value="Loguj"></td></tr>';
  80. echo '</table></form>';
  81. echo '<br /><br /><center><a href="">Strona główna</a></center><br /><br /><br /><br />';
  82. }
  83. ?>
  84.  
  85. </body>
  86. </html>


każdy następny plik rozpoczyna się:

  1. <?php
  2.  
  3. if(isset($_SESSION['prawid_uzyt']) && session_id() === $sid) { to coś tam }
  4. ?>


wylogowanie:

  1. <?php
  2.  
  3. unset($_SESSION['prawid_uzyt']);
  4. unset($_SESSION['prawid']);
  5. unset($_COOKIE[session_name()]);
  6. ?>
Cysiaczek
Cytat
  1. <?php
  2. $zapytanie = "SELECT * FROM users WHERE user='$login' AND passwd='$passwd'";
  3. $wynik = mysql_query($zapytanie);
  4.  
  5. $query = "SELECT passwd FROM users WHERE user='$login'";
  6. ?>


Dlaczego tak? NIe wystarczyło pierwsze zapytanie? Wyciągnąłeś wszystkie pola, więc je jakoś wykorzystaj. To drugie zapytanie jest zbędne. Pokombinuj - da się to uprościć.

Pozdrawiam,
SHiP
Jesli ten skrypt jest tylko dla Ciebie to nie jest źle ;]. Jesli chcesz natomiast to puscić w świat to kilka uwag...

Kod
<?php
if(isset($_SESSION['prawid_uzyt']) && session_id() === $sid) { to coś tam }
?>


1. Odwolujesz sie do $sid zamiast do $_GET['sid'] wiec przypuszczasz ze register globals są właczone ;] Niedobrze ;p
2. Jeśli inny administrator bedzie chciał z tego kożystać a bedzie mial wyłaczone cookies to co wtedy?
3. A jeśli serwer ma domyślnie wyłączone magic_quotes ;] ? Zero ochrony przed sql injection ;]
prz3m3k
1. okej poprawię smile.gif
2. nie będzie z tym problemu.
3. dobra przyznaje sie nie wiem o co chodzi tongue.gif

phpinfo() na serwerze gdzie to ma działać:

  1. <?php
  2. magic_quotes_gpc On On
  3. magic_quotes_sybase Off Off
  4. ?>


jeśli to jest błedem to czy da się to jakoś inaczej rozwiązać i nie męczyć admina zmienianiem "magic_quotes_gpc" na "off"
prz3m3k
hmmmm czy jak na serwerze jest włączone magic_quotes_gpc to musze wykonywać ten skrypt który mi napisałeś powyżej SHiP ?

fragment z manuala php:

  1. <?php
  2.  $lastname = addslashes($_POST['lastname']);
  3. } else {
  4.  $lastname = $_POST['lastname'];
  5. }
  6. ?>


czyli u mnie chyba nie jest potrzebne sprawdzanie tegoż warunku skoro wiem że skrypt będzie działał na serwerze gdzie magic_quotes_gpc jest włączone i nie musze potraktowac mojej zmiennej funkcją addslashes worriedsmiley.gif
SHiP
No tak w twoim przypadku to bedzie bezpieczne... Chociaż moim zdaniem i tak lepiej kod pisac uniwersalny ;]
bim2
Now łasnie. A jeśli np admin wyłączy ci magci quotes? Trzeba mysleć do przodu ;P robić wszystko tak aby na kazdym serwerze działało tak samo (podobnie) 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.