Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][PDO] Czy potrzeba zabezpieczać zmienne, od użytkownika ?.
Forum PHP.pl > Forum > Przedszkole
Gilu¶
Cze¶ć, mam taki kod:

  1. if(isset($_POST['username']))
  2. {
  3. $username = mysql_real_escape_string($_POST['username']);
  4. $zajety = $pdo -> prepare('SELECT id FROM `users` WHERE `login` = :login');
  5. $zajety -> bindValue(':login', $username, PDO::PARAM_STR);
  6. $zajety -> execute();
  7. $count = $zajety->rowCount();
  8. if($count > 0) {echo 'OK';}
  9. else {
  10. $lang = (empty($_SESSION['lang'])) ? 'pl' : $_SESSION['lang'];
  11. require('./Joker/language/'.$lang.'/logowanie.inc.php');
  12. $tpl = new \Joker\Tpl\Engine('./templates/');
  13. $view = $tpl->createView('logowanie_spr');
  14. $view->username = $username;
  15. $view->logowanie = $logowanie;
  16. $view->render();
  17. }
  18. $zajety -> closeCursor();
  19. }


I gdy go odpalam na localhost z PHP: 5.4.10 to działa normalnie, natomiast gdy go odpalę na serwerze gdzie jest PHP: 5.3.15 to jest bł±d który znika jak usunę funkcję: mysql_real_escape_string();, ale czym zast±pić t± funkcję która zabezpieczała mi zmienne - A może PDO sam w sobie już posiada zabezpieczenie ?.

Pozdrawiam i z góry bardzo dziękuje.
nospor
PDO robi to za ciebie.... mysql_real_escape_string() jest zbędne
Gilu¶
Czyli wystarczy ustawiać tutaj:

  1. bindValue(':login', $username, PDO::PARAM_STR);
  2. // Lub...
  3. bindValue(':login', $username, PDO::PARAM_INT);

Czy nawet i to nie jest potrzebne ?
nospor
No to musi być. To się nazywa bindowanie i dzieki temu nie musisz robić już nic więcej
!*!
Cytat(nospor @ 6.02.2013, 09:55:03 ) *
No to musi być. To się nazywa bindowanie i dzieki temu nie musisz robić już nic więcej

Nie szalej, bo jeszcze uwierzy wink.gif
Walidacja danych musi przebiegać zawsze, gdy odbierasz j± od użytkownika. Bez znaczenia czy używasz PDO czy nie.

Swoj± drog±, jak to możliwe że na PHP 5.4 nie wywala błędu? Wł±czyłe¶ ich widoczno¶ć?

I poczytaj to http://pl.wikibooks.org/wiki/PHP/Biblioteka_PDO
nospor
Cytat
Nie szalej, bo jeszcze uwierzy
Walidacja danych musi przebiegać zawsze, gdy odbierasz j± od użytkownika. Bez znaczenia czy używasz PDO czy nie.
.... a od kiedy mysql_escape_string() to walidacja danych? Przecież mówimy o wkładaniu danych do bazy, a nie sprawdzaniu, czy user podał prawidłowe dane....
!*!
Cytat
[PHP][PDO] Czy potrzeba zabezpieczać zmienne, od użytkownika


Pamiętasz ten temat z wczoraj o wkładaniu formularzy do bazy? wink.gif
nospor
Pamietam. Ale co ma piernik do wiatraka? Mówimy tutaj o wkładaniu danych do bazy. Bindowanie wystarcza je¶li mówimy o wkladaniu danych do bazy. Autor pytał się o to w kontek¶cie mysql_escape_string().

A ty wyjeżdzasz nagle z jak±¶ walidacj±. To zupełnie inna sprawa czy dane które podał s± prawidłowe w kontek¶cie aplikacji. W kontek¶cie wkładania do bazy bindowanie wystarcza.
Gilu¶
No tak na Localhoscie nie miałem uruchomionych błędów może dla tego...

Zawsze przy odbieraniu danych od użytkownika sprawdzałem funkcj± mysql_real_escape_string(); czy nie posiada jaki¶ dziwnych danych które mog± zaszkodzić mojej bazie (ataki sql injection itp) i dlatego gdy teraz przerzuciłem się na PDO to się zastanawiam czym zast±pić t± funkcję, ale widzę że praktycznie nic nie trzeba robić..

A co do walidacji czyli s± jakie¶ znaki w zmiennej, czy też jest ona za krótka, długa to już inna funkcja która działa mi bardzo dobrze..

Pozdrawiam i z góry bardzo dziękuje za odpowiedz.
sowiq
Cytat(Gilu¶ @ 6.02.2013, 10:35:06 ) *
Zawsze przy odbieraniu danych od użytkownika sprawdzałem funkcj± mysql_real_escape_string(); czy nie posiada jaki¶ dziwnych danych

Kolego, nie myl pojęć. Funkcja mysql_real_escape_string niczego nie sprawdza. Ona służy do "eskejpowania", czyli zabezpieczania przez dodawanie znaku ucieczki do potencjalnie niebezpiecznych znaków w ci±gu.
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.