Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][PDO] Czy potrzeba zabezpieczać zmienne, od użytkownika ?.
Giluś
post 6.02.2013, 09:38:50
Post #1





Grupa: Zarejestrowani
Postów: 377
Pomógł: 9
Dołączył: 2.11.2010

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


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.
Go to the top of the page
+Quote Post
nospor
post 6.02.2013, 09:41:24
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




PDO robi to za ciebie.... mysql_real_escape_string() jest zbędne


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Giluś
post 6.02.2013, 09:44:52
Post #3





Grupa: Zarejestrowani
Postów: 377
Pomógł: 9
Dołączył: 2.11.2010

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


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 ?
Go to the top of the page
+Quote Post
nospor
post 6.02.2013, 09:55:03
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No to musi być. To się nazywa bindowanie i dzieki temu nie musisz robić już nic więcej


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
!*!
post 6.02.2013, 10:10:37
Post #5





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


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

Ten post edytował !*! 6.02.2013, 10:11:42


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
nospor
post 6.02.2013, 10:12:26
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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....


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
!*!
post 6.02.2013, 10:14:56
Post #7





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


Cytat
[PHP][PDO] Czy potrzeba zabezpieczać zmienne, od użytkownika


Pamiętasz ten temat z wczoraj o wkładaniu formularzy do bazy? wink.gif


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
nospor
post 6.02.2013, 10:17:44
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Giluś
post 6.02.2013, 10:35:06
Post #9





Grupa: Zarejestrowani
Postów: 377
Pomógł: 9
Dołączył: 2.11.2010

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


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.
Go to the top of the page
+Quote Post
sowiq
post 6.02.2013, 11:17:14
Post #10





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

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


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.

Ten post edytował sowiq 6.02.2013, 11:18:25
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 13.08.2025 - 23:49