Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Prośba o ocenę
Forum PHP.pl > Inne > Oceny
Jarod
Poniżej zamieściłem skrypt, który stosuję do logowania na podstawie bazy. Co o nim myślicie? Czy Waszym zdaniem warto coś poprawić, usprawnić w jakiś sposób? Może nie jest zbyt bezpieczny?

  1. <?php
  2. session_name('sofik');
  3. include "config.inc.php";
  4. ?>
  5.  
  6.  
  7. <!-- ZALOGUJ I USTAW ZMIENNE SESYJNE -->
  8. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  9. <html>
  10. <head>
  11. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
  12. <meta name="pragma" content="no-cache" />
  13. <title>Logowanie...</title>
  14. <link rel="stylesheet" type="text/css" href="autoryzacja.css" />
  15. </head>
  16. <body>
  17. <?php
  18.  
  19. //Połączenie z bazą danych
  20. $conn = mysql_connect($server, $identyfikator, $haslo)
  21. or die ("Nie udało się połączyć z bazą danych! BŁˇD: ".mysql_error());
  22. //Wybór bazy danych
  23. or die ("Nie udało się wybrać bazy! BŁˇD: ".mysql_error());
  24.  
  25. //Zapytanie o login i hasło
  26. $query = "SELECT * FROM konto WHERE login='".$_POST['logid']."';";
  27. $result = mysql_query($query)
  28. or die ("Zapytanie nieudane! BŁˇD: ".mysql_error());
  29. $query_data = mysql_fetch_row($result);
  30.  
  31.  
  32. //Sprawdzenie czy podany login i hasło są poprawne
  33. if (MD5($_POST['pas']) == $query_data[2])
  34. {
  35.  
  36.  //Udana autoryzacja
  37.  if ( ($query_data[3] == 0) OR (($query_data[3] == 3)) )
  38.  {
  39. //Zapytanie o dane osoby zalogowanej z tabeli pracownika
  40. $query = "SELECT konto.konto_id, login, haslo, kto, imie, nazwisko FROM konto, pracow
    nik "
    .
  41.  "WHERE login='".$_POST['logid']."' AND konto.konto_id=pracownik.konto_id;";
  42. $result = mysql_query($query)
  43. or die ("Zapytanie nieudane! BŁˇD: ".mysql_error());
  44. $query_data = mysql_fetch_row($result);
  45. $ID = $query_data[0];
  46.  
  47. $_SESSION['id'] = $query_data[0]; //Konto_id
  48. $_SESSION['nick'] = $query_data[1]; //Login
  49. $_SESSION['haslo'] = $query_data[2]; //Hasło
  50. $_SESSION['kto'] = $query_data[3]; //Pracownik czy klient?
  51. $_SESSION['imie'] = $query_data[4]; //Imie
  52. $_SESSION['nazwisko'] = $query_data[5]; //Nazwisko
  53.  
  54. //------------------->ROZPOCZCIE TRANSAKCJI
  55. $query = "BEGIN WORK";
  56. $result = mysql_query($query)
  57. or die ("Zapytanie nieudane! BŁˇD: ".mysql_error());
  58.  
  59. //Dodanie daty i godziny logowania
  60. $query = "INSERT INTO logi (konto_id, data_log, godzina_log) VALUES ($ID,CURDATE(),CURTIME());";
  61. $result = mysql_query($query)
  62. or die ("Zapytanie nieudane! BŁˇD: ".mysql_error());
  63. //-------------------> ZATWIERDZENIE TRANSAKCJI
  64. $query = "COMMIT";
  65. $result = mysql_query($query)
  66. or die ("Zapytanie nieudane! BŁˇD: ".mysql_error());
  67.  
  68. //Sprawdzenie wartości klucza logi_id
  69. $query = "SELECT LAST_INSERT_ID()";
  70. $result = mysql_query($query)
  71. or die ("Zapytanie nieudane! BŁˇD: ".mysql_error());
  72. $query_data = mysql_fetch_row($result);
  73.  
  74. $_SESSION['id_logi'] = $query_data[0]; //Logi_id
  75.  
  76. //Zamknięcie połączenia z bazą danych
  77. mysql_close($conn);
  78.  
  79. header("location: start.php?".SID);
  80.  }
  81.  else
  82.  {
  83. //Zapytanie o dane osoby zalogowanej z tabeli klienta
  84. $query = "SELECT konto.konto_id, login, haslo, kto, imie, nazwisko FROM konto, klient
     "
    .
  85.  "WHERE login='".$_POST['logid']."' AND konto.konto_id=klient.konto_id;";
  86. $result = mysql_query($query)
  87. or die ("Zapytanie nieudane! BŁˇD: ".mysql_error());
  88. $query_data = mysql_fetch_row($result);
  89. $ID = $query_data[0];
  90.  
  91. $_SESSION['id'] = $query_data[0]; //Konto_id
  92. $_SESSION['nick'] = $query_data[1]; //Login
  93. $_SESSION['haslo'] = $query_data[2]; //Hasło
  94. $_SESSION['kto'] = $query_data[3]; //Pracownik czy klient?
  95. $_SESSION['imie'] = $query_data[4]; //Imie
  96. $_SESSION['nazwisko'] = $query_data[5]; //Nazwisko
  97.  
  98. //------------------->ROZPOCZCIE TRANSAKCJI
  99. $query = "BEGIN WORK";
  100. $result = mysql_query($query)
  101. or die ("Zapytanie nieudane! BŁˇD: ".mysql_error());
  102.  
  103. //Dodanie daty i godziny logowania
  104. $query = "INSERT INTO logi (konto_id, data_log, godzina_log) VALUES ($ID,CURDATE(),CURTIME());";
  105. $result = mysql_query($query)
  106. or die ("Zapytanie nieudane! BŁˇD: ".mysql_error());
  107. //-------------------> ZATWIERDZENIE TRANSAKCJI
  108. $query = "COMMIT";
  109. $result = mysql_query($query)
  110. or die ("Zapytanie nieudane! BŁˇD: ".mysql_error());
  111.  
  112. //Sprawdzenie wartości klucza logi_id
  113. $query = "SELECT LAST_INSERT_ID()";
  114. $result = mysql_query($query)
  115. or die ("Zapytanie nieudane! BŁˇD: ".mysql_error());
  116. $query_data = mysql_fetch_row($result);
  117.  
  118. $_SESSION['id_logi'] = $query_data[0]; //Logi_id
  119.  
  120. //Zamknięcie połączenia z bazą danych
  121. mysql_close($conn);
  122.  
  123. header("location: start.php?".SID);
  124.  }
  125. }
  126. else
  127. {
  128.  // Zły login lub hasło
  129.  ?>
  130.  <br><br><br><br><br><br><br><br><br>
  131.  <table width="80%" align="center" border="0" cellpadding="14">
  132. <tr>
  133. <td><h2 class="error">Podałeś zły login lub hasło!</h2></td>
  134. </tr>
  135.  </table>
  136.  <?php
  137.  echo "<META HTTP-EQUIV='Refresh' CONTENT='3; URL=main.php'>";
  138. }
  139. ?>
  140.  
  141. </body>
  142. </html>
devnul
skrypt wygląda dobrze - rzczej nie jest niebezpieczny winksmiley.jpg
tylko jedno ale: czemu drukujesz z poziomu php kod html? ani to czytelne ani potrzebne, tylko dodatkowe obciązanie parsera

ale chyba nie to forum co? snitch.gif
mike
Przenoszę z php na Oceny

Swoją drogą walisz "Proszę o ocenę..." a na Ocenach nie dajesz, coś z Tobą nie tak?

P.S.
Dlaczego wszędzie dajesz die()?
To najgorsze wyjście, poczytaj o wyjątkach i inaczej rozwiąż kwestie problematyczne.
Jarod
Cytat(mike_mech @ 2006-05-11 19:31:08)
Przenoszę z php na Oceny

Swoją drogą walisz "Proszę o ocenę..." a na Ocenach nie dajesz, coś z Tobą nie tak?

P.S.
Dlaczego wszędzie dajesz die()?
To najgorsze wyjście, poczytaj o wyjątkach i inaczej rozwiąż kwestie problematyczne.

mike_mech: bo skrypt ten pisałem dawno pod php4 wiem że można go przepisać pod php5 z obsługą wyjątków
ps. jestem zmęczony - przepraszam za zły dział


@devnul: poprawie
nospor
...WHERE login='".$_POST['logid']."'.....
a teraz patrzymy w ten topic:
http://forum.php.pl/index.php?showtopic=23258&st=0
i juz wiemy o czym mowie winksmiley.jpg
Jarod
Cytat(nospor @ 2006-05-11 20:09:57)
...WHERE login='".$_POST['logid']."'.....
a teraz patrzymy w ten topic:
http://forum.php.pl/index.php?showtopic=23258&st=0
i juz wiemy o czym mowie winksmiley.jpg

Przeczytałem ale nie wiem gdzie błąd i jak go naprawić..?
devnul
widocznie nie przeczytałeś uważnie biggrin.gif

cytat z wypowiedzi Vengeance`a (pierwsza odpowiedz w tym temacie)
Cytat
punkt 2. ja stosuje po prostu addslashes() i filtruje dane z POST GET COOKIE itd. tzn jak ma byc liczba do liczba a nie string

i wszystko staje się jasne.

wszystkie dane które przekazujesz do bazy danych potraktuj funkcją addslashes(), czyli np.
  1. <?php
  2. addslashes($_POST["login"]);
  3. ?>
TomASS
Cytat
skrypt wygląda dobrze - rzczej nie jest niebezpieczny

Cytat
widocznie nie przeczytałeś uważnie

Ty też tongue.gif


Ja bym raczej proponował funkcje specjalnie do tego stworzoną - mysql_escape_string().

1.
Możesz zamiast:
  1. <?php
  2. $query = "SELECT konto.konto_id, login, haslo, kto, imie, nazwisko 
  3. FROM konto, pracownik ".
  4.                "WHERE login='".$_POST['logid']."' AND konto.konto_id=pracownik.konto_id;";
  5. ?>

Pisać wygodniej:
  1. <?php
  2. $query = "SELECT K.konto_id, login, haslo, kto, imie, nazwisko FROM konto AS K , prac
    ownik AS P WHERE login='"
    .$_POST['logid']."' 
  3. AND K.konto_id=P.konto_id;";
  4. ?>


2.
Nie łatwiej byłoby trzymać datę i czas w jednej komórce w bazie danych? :
  1. <?php
  2.    $query = "INSERT INTO logi (konto_id, data_log, godzina_log) VALUES ($ID,CURDATE(),CURTIME());";
  3. ?>


3.
Jeśli już używasz styli, to bądź konsekwentny:
  1. <table width="80%" align="center" border="0" cellpadding="14">


Ale to tak szukanie dziury w całym - popraw to o czym napisał kolega nospor oraz mike_mech i powinno być dobrze party.gif
Jarod
W celu wyeliminowania możliwości załadowania konkretnej podstrony przez użytkownika, na każdej podstronie mam taki kod:

  1. <?php
  2. session_name('sofik');
  3.  
  4. //JEŚLI NIE ISTNIEJE SESJA UŻYTKOWNIKA TO POWRÓT NA STRON LOGOWANIA
  5. if ( (!isset($_SESSION['nick'])) && (!isset($_SESSION['haslo'])) )
  6. {
  7.  ?>
  8.  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  9.  <html>
  10.  <head>
  11.  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
  12.  <meta name="pragma" content="no-cache" />
  13.  <link rel="stylesheet" type="text/css" href="autoryzacja.css" />
  14.  </head>
  15.  <body>
  16.  <table width="80%" align="center" border="0" cellpadding="14">
  17. <tr>
  18. <td><img src="images/spacer.gif" alt="" width="0" height="140"></td>
  19. </tr>
  20. <tr>
  21. <td><h2 class="error">BRAK UPRAWNIEŃ! &nbsp ZALOGUJ SI</h2></td>
  22. </tr>
  23.  </table>
  24.  </body>
  25.  </html>
  26.  <?php
  27.  echo "<META HTTP-EQUIV='Refresh' CONTENT='3; URL=main.php'>";
  28.  exit();
  29. }
  30. ?>


Co o tym sądzicie? Poprawilibyście coś?
Jabol
Jeżeli miałbym to ocenić w skali 1 do 10 dostałbyś 1, i to z wielkim minusem!

Nawet tego skryptu nie przejrzałem - odpowiedź na pytanie za co ta ocena znajedziesz już w trzeciej linijce!

Popraw to zobaczymy winksmiley.jpg
ActivePlayer
masz gdzies ten skrypt online ? chcialbym sprawdzic conieco.
Jarod
Cytat(Jabol @ 2006-05-14 19:49:40)
Jeżeli miałbym to ocenić w skali 1 do 10 dostałbyś 1, i to z wielkim minusem!

Nawet tego skryptu nie przejrzałem - odpowiedź na pytanie za co ta ocena znajedziesz już w trzeciej linijce!

Popraw to zobaczymy winksmiley.jpg

Nie wiem o co Ci chodzi.. Możesz napisać gdzie jest błąd?

@ActivePlayer: nie mam na serwerze
erix
masz stala sofik?

  1. <?php
  2. session_name(sofik);
  3. ?>


chyba nie, wiec powinno byc:

  1. <?php
  2. session_name('sofik');
  3. ?>
Jarod
Cytat(erix @ 2006-05-14 21:41:09)
najpierw startuj sesje, potem zmieniaj jej nazwe...

To nie ma żadnego wpływu na bezpieczeństwo. I działa. Ale skoro tak mówisz to poprawie..

Pozatym myślę, że Jabol doczepił się o coś innego..
erix
sory, zmienilem posta... worriedsmiley.gif
rozwiazanie ^^^
Jarod
Cytat(erix @ 2006-05-14 21:45:13)
sory, zmienilem posta... worriedsmiley.gif
rozwiazanie ^^^

Poprawiłem. Proszę jeszcze raz o ocenę.

Czy to bezpieczny sposób na autoryzację (oczywiście dodam addslashes() i konwersję typów)?

Czy dobrze zabezpieczam każdą podstronę?
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-2024 Invision Power Services, Inc.