Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] filtrowanie danych z formularzy - bezpieczeństwo.
Doody
post
Post #1





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 21.09.2008

Ostrzeżenie: (0%)
-----


Kiedyś napisałem prosty CRM który działał ale był skrajnie niebezpieczny, tzn nie ma żadnego filtrowania danych przesyłanych z formularzy ani też tych zapisywanych w bazie.
Teraz zająłem się właśnie kwestią bezpieczeństwa aby mój twór stał się w końcu przydatny.

Na pierwszy ogień poszła kwestia panelu logowania i tu pytanie: czy sprawdzenia hasła i loginu jak poniżej jest Waszym zdaniem wystarczająco bezpieczne:
  1. <?php
  2. include('db_con.php'); //łączy z serwerem i wybiera bazę danych
  3. if(isset($_POST['login']) || isset($_POST['haslo'])){ //sprawdza czy hasło lub login zostały wprowadzone i przesłane metodą POST
  4. session_start(); //rozpoczyna sesję
  5. $zapytanie = "SELECT * FROM biz_user WHERE p_login = '".trim($_POST['login'])."'"; // wybiera z bazy MySQL rekordy z komórką p_login równą podanemu loginowi
  6. if(preg_match('/^[a-zA-Z0-9.\-_]+\@[a-zA-Z0-9.\-]+\.[a-z]{2,4}$/D', trim($_POST['login'])) && mysql_num_rows(mysql_query($zapytanie)) > 0){ // sprawdza czy ilość znalezionych rekordów jest większa od zera oraz czy login będący adresem e-mail jest zgodny z odpowiadającym mu wyrażeniem regularnym
  7. $zapytanie = "SELECT * FROM biz_user WHERE p_login = '".$_POST['login']."'&& p_haslo = '".$_POST['haslo']."'"; // wybiera z bazy MySQL rekordy z komórką p_haslo równą podanemu hasłu i komórką p_login równą podanemu loginowi
  8. if(preg_match('/[^\/\'\`\"\n\s\\\\]{2,20}$/D', $_POST['haslo']) && mysql_num_rows(mysql_query($zapytanie)) > 0){ // sprawdza czy ilość znalezionych rekordów jest większa od zera
  9. $zapytanie = "SELECT * FROM biz_user WHERE p_login = '".$_POST['login']."' LIMIT 1"; // pobiera używane w sesji dane użytkownika
  10. while($wiersz=mysql_fetch_array(mysql_query($zapytanie))){
  11. $_SESSION['user_id'] = $wiersz['p_id']; //zapisuje ID użytkownika w zmiennej sesyjnej
  12. $_SESSION['user'] = $wiersz['p_imie'].' '.$wiersz['p_nazwisko']; //zapisuje imię i nazwisko użytkownika w zmiennej sesyjnej
  13. $_SESSION['status'] = $wiersz['p_status']; //zapisuje ststus użytkownika w zmiennej sesyjnej
  14. break;
  15. }
  16. $_SESSION['zalogowany'] = true;
  17. header("Location: lista_firm.php");
  18. }
  19. else{
  20. header('Location: index.php?log_error=2');
  21. }
  22. }
  23. else{
  24. header('Location: index.php?log_error=1');
  25. }
  26. }
  27. else{
  28. <center>
  29. <br />
  30. <br />
  31. <img src="picture/logo.png">
  32. <br />
  33. <br />
  34. <h3>Logowanie do systemu</h3>
  35. ';
  36. if (isset($_GET['log_error'])){
  37. $log_error=$_GET['log_error'];
  38. if ( $log_error == 1 ) echo '<b>Nie istnieje taki użytkownik! </b><br />';
  39. if ( $log_error == 2 ) echo '<b>Podane hasło jest nieprawidłowe! </b><br />';
  40. }
  41. <form action="index.php" method="post">
  42. <br />
  43. Login: <input type="text" name="login" size="30"/><br/>
  44. <br />
  45. Hasło: <input type="password" name="haslo" size="30"/><br/>
  46. <br />
  47. <input class="przycisk" type="submit" value="WEJŚCIE" /><br/>
  48. </form>
  49. </center>
  50. ';
  51. }
  52. ?>


Zakładam że loginem jest adres e-mail a hasło nie może zawierać znaków \ / ' ` " \n \s


Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Doody
post
Post #2





Grupa: Zarejestrowani
Postów: 22
Pomógł: 0
Dołączył: 21.09.2008

Ostrzeżenie: (0%)
-----


Jestem początkujący ale co oznacza SQL Injection wiem.
Rozumiem że skoro się wypowiadasz, to jesteś bardziej zaawansowany. Jeśli możesz wskaż po prostu proszę gdzie jest ta luka, bo jestem za głupi żeby zrozumieć twoje zdawkowe odpowiedzi. Cytowanie mi def. SQL Injection nic nie wnosi do tematu.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 14.10.2025 - 19:34