Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] logowanie
Forum PHP.pl > Forum > PHP
krzysiek_raven
Witam.
Chcę się was zapytać czy taki sposób logowania do panelu administracyjnego jest dość bezpieczny.

Plik logHas.php w którym zawarty jest login i hasło zakodowane md5():
  1. <?php
  2. $login = "admin"; $haslo = "fee8b18874c4fef6c46e4d28c4866c9f";
  3. ?>


Plik login.php o następującej zawartości (włączany jest do niego plik logHas.php):
  1. <?php
  2. include('include/logHas.php');
  3.  
  4. function formularz()
  5. {
  6. echo('
  7. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  8. <html>
  9. <head>
  10. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
  11. </head>
  12. <body>
  13. <center><FORM ACTION="login.php" METHOD="post">
  14.  Wpisz login i hasło<br />
  15.  Login: <INPUT TYPE="tekst" NAME="log"><br />
  16.  Hasło: <INPUT type="password" NAME="has"><br />
  17.  <input type="submit" value="zaloguj">
  18. </FORM><br>
  19.  </body>
  20.  </html>');
  21. }
  22. function sprawdz($l, $h, $login, $haslo)
  23. {
  24.  if ($l == $login && md5($h) == $haslo){
  25. return TRUE;
  26.  }
  27.  else return FALSE;
  28. }
  29.  
  30.  
  31. // -- MAIN --
  32.  
  33. $l = $_POST['log'];
  34. $h = $_POST['has'];
  35.  
  36. if (sprawdz($l, $h, $login, $haslo)){
  37.  
  38.  // -- obsługa sesji --
  39.  
  40.  if (!isset($_SESSION['id'])){
  41. $_SESSION['id'] = $login;
  42. header("Location: index.php?" . SID);
  43.  }
  44.  
  45. }
  46. else if ($l != '' || $h != ''){
  47.  echo('<center>Hasło lub login niepawidłowe</center><br>');
  48.  formularz();
  49. }
  50. else formularz();
  51. ?>


Przy każdym pliku który ma być zabezpieczony wklejam następujący kod:
  1. <?php
  2. if (!isset($_SESSION["id"])){
  3. header("Location: ../login.php?" . SID);
  4. exit();
  5. }
  6. else{
  7. ...
  8. }
  9. ?>


Jest to pewnie jeden z najprostszych sposobów zabezpieczenia, ale czy da się go łatwo obejść? Jeśli tak to co zmienić żeby było lepiej?winksmiley.jpg
bliitz
możesz zmienić kodowanie hasła z md5 na bezpieczniejsze sha1, i dlaczego trzymasz login i hasło w pliku a nie w bazie?
krzysiek_raven
Nie chciałem tworzyć tabeli w bazie specjalnie dla jednego loginu i hasła. A czy jest jakiś sposób na wyciągnięcie danych z takiego pliku? Wartości zmiennych są zawarte w znacznikach <?php ?> to nawet jak by ktoś chciał wywołać ten plik to i tak nic by nie zobaczył winksmiley.jpg


Edit:

Chociaż wpadł mi taki pomysł teraz że ktoś by mógł ten pliczek podmienić na inny ze swoim loginem i hasłem, ale to chyba musiał by mieć dostęp do FTP żeby cokolwiek zrobić?
kemot
Możesz jeszcze stworzyć tablice ze znakami, które będą usuwane z wpisanego loginu tak by nikt nie wpisał w to okienko kodu, który mógłby zakłucić działanie skryptu. Robi się to mniej więcej tak:


  1. <?php
  2.  
  3. //tworzymy tablice $zakazaneznaki, możesz do niej wpisać do niej jakie tylko chcesz znaki 
  4. //(wystarczy usunąć podstawowe operatory)
  5.  
  6. $zakazaneznaki = array( '^', ''', '"', '`', '~', '+', '=', '<', '>', '$', '!', '@', 
  7. '#', '%', '&', '*', '(', ')', '_', '-', '[', ']', '{', '}', '/', '|', '', '?', ';', ':', ',', '.' );
  8.  
  9. $log = str_replace( $zakazaneznaki, ', $log );
  10.  
  11. //str_replace usuwa znaki znajdujace sie w tablicy z loginu
  12. //bez tych znaków żaden złośliwiec nie wykona zapytania do bazy danych, ani nie wprowadzi jakiegos 
  13. //destrukcyjnego kodu php, istnieja do tego też wbudowane funkcje takie jak 
  14. //mysql_escape_string(), htmlspecialchars() itd. ale w ten sposób możemy dokładnie zdefiniowac co chcemy usunąć 
  15.  
  16. ?>


Nie wiem tylko po co się męczysz z formularzem w funkcji. Myśle że lepiej by go było zapisać jako oddzielny plik html i potem zincludować smile.gif 
TrevorGryffits
@kemot - nie widzę powodu. Biorąc pod uwagę tylko podany kod. Przesłane login i hasło nie są nigdzie wyświetlane, ani używane do zapytań.
kemot
Niby nie ale warto to wiedziec gdyby jednak krzysiek zdecydował się na baze danych smile.gif
krzysiek_raven
Ok, dzięki. Dodałem tą funkcję usuwająca znaki.
Czyli można powiedzieć że sam sposób logowania jest mniej więcej bezpieczny. guitar.gif
Domyślam się że najsłabszym ogniwem może być tu użytkownik, który nie wylogował się z panelu lub w jakiś sposób ktoś zdobył jego identyfikator sesji, ale chodziło mi głównie o samo logowanie.

Formularz dałem w funkcji bo wolę mieć wszystko w jednym pliku;)
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.