Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] PDO pytanie o bezpieczeństwo
Forum PHP.pl > Forum > Przedszkole
pjamalia
Witam,

Rozpocząłem używanie PDO z PHP i MySQL. Czy korzystanie z tych bibliotek daje zabezpieczenie przed SQLInjection?
Czy poniższy przykład właśnie daje taki efekt:

  1. public function pdoGetUsersA()
  2. {
  3. $sql =
  4. 'SELECT
  5. PAS.NICKNAME
  6. ,PAS.TIMESTAMP
  7. ,REG.NAME
  8. ,REG.SURNAME
  9. ,REG.EMAIL
  10. FROM REG REG
  11. INNER JOIN
  12. PAS PAS
  13. ON
  14. REG.id_usr = PAS.id_usr
  15. ';
  16. foreach($this->pdo->query($sql) as $row)
  17. {
  18. $this->nickname[$this->counter] = $row['NICKNAME'];
  19. $this->counter++ ;
  20. }
  21. $this->pdo = null;
  22. $this->counter = null;
  23. }
-kaem-
Przecież w tym zapytaniu nie podczepiasz żadnych danych od usera. Zły przykład. A żeby uniknąć sql injection używaj metody prepare() i bindowania parametrów.
pjamalia
To w takim razie czy moge poprosić o jakiś przykład wykorzystania tego co napisałeś na tym przyładzie:

  1. public function pdoGetUsersA($pass)
  2.  
  3. {
  4.  
  5. $sql =
  6.  
  7. 'SELECT
  8.  
  9. PAS.NICKNAME
  10.  
  11. ,PAS.TIMESTAMP
  12.  
  13. ,REG.NAME
  14.  
  15. ,REG.SURNAME
  16.  
  17. ,REG.EMAIL
  18.  
  19. FROM REG REG
  20.  
  21. INNER JOIN
  22.  
  23. PAS PAS
  24.  
  25. ON
  26.  
  27. REG.pass = '$pass'
  28.  
  29. ';
  30.  
  31. foreach($this->pdo->query($sql) as $row)
  32.  
  33. {
  34.  
  35. $this->nickname[$this->counter] = $row['NICKNAME'];
  36.  
  37. $this->counter++ ;
  38.  
  39. }
  40.  
  41. $this->pdo = null;
  42.  
  43. $this->counter = null;
  44.  
  45. }
-pjamalia-
To teraz ostatnie pytanie, czy ten poniższy insert jest już odporny na SQLInjection?

  1. try
  2. {
  3. $dbserver = DB_SERVER;
  4. $dbuser = DB_USER;
  5. $dbpass = DB_PASS;
  6. $db_name = DB_NAME;
  7. $pdo = null;
  8. $pdo = new PDO('mysql:host='.$dbserver.';dbname='.$db_name,$dbuser,$dbpass);
  9. $sth = $pdo->prepare
  10. ('
  11. INSERT INTO PDO
  12. (
  13. IDE,
  14. IDA,
  15. IDU,
  16. DATE_FROM,
  17. DATE_TO,
  18. ACTIVE
  19. )
  20. VALUES(""
  21. ,:ida
  22. ,:idu
  23. ,:date_from
  24. ,:date_to
  25. ,:actve
  26. )
  27. ');
  28.  
  29. $sth->execute
  30. (
  31. (
  32. ':ida'=>$idaa,
  33. ':idu'=>$idu,
  34. ':date_from'=>$date_from,
  35. ':date_to'=>$date_to,
  36. ':actve'=>$actve
  37. )
  38. );
  39. return true;
  40. }
  41. catch(PDOException $e)
  42. {
  43. echo 'Błąd: '.$e->getMessage();
  44. return false;
  45. }
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.