Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] PDO - ochrona danych
Majkelo23
post 25.11.2013, 19:41:22
Post #1





Grupa: Zarejestrowani
Postów: 226
Pomógł: 17
Dołączył: 13.02.2012

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


Wiele naczytałem się na forum, głównie tym, że PDO jest cacy i nic innego nie warto używać tylko pdo bo nie trzeba się martwić o to, że ktoś zrobi nam niemiłą niespodziankę w postaci 'hacked by gimbus2013'. Teraz się zastanawiam... Jeśli mam zmienne typu $_POST lub $_GET to zwyczajnie, jeśli chcę liczbę - daję to w intval(), a jeśli tekst to tylko trim() i tyle. Pozostałą rolę miało odegrać tutaj bindowanie danych przy wybraniu odpowiedniego typu (PARAM_STR/PARAM_INT).
Próbowałem teraz jak to jest naprawdę i zauważyłem, że jak wklepię regułkę w input, tak ja widzę też w phpmyadminie (mówię o bindzie ustawionym na param_str i polu TEXT). Wklepałem
  1. ' AND 1=1 /*
i w całości przeszło do bazy danych bez jakiegokolwiek backslasha. To samo z htmlowymi znakami:
  1. <script type="text/javascript">alert("test");</script>
też bez zmian - w całości poszło do bazy. Czy tak ma być ? Czy należy dodatkowo jeszcze filtrować jakoś dane ? Czy PDo chroni tylko i wyłącznie przed sql injection czy może przed xss też uchroni? ;>

Ten post edytował Majkelo23 25.11.2013, 19:47:21
Go to the top of the page
+Quote Post
Turson
post 25.11.2013, 19:46:39
Post #2





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


PDO przygotowuje zapytanie tak, że jest ono wykonywane w bezpieczny sposób.
Do XSS masz htmlspecialchars czy addslashes - bo wtedy dane są pokazywane użytkownikowi.
Go to the top of the page
+Quote Post
Majkelo23
post 25.11.2013, 19:49:15
Post #3





Grupa: Zarejestrowani
Postów: 226
Pomógł: 17
Dołączył: 13.02.2012

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


Cytat(Turson @ 25.11.2013, 19:46:39 ) *
PDO przygotowuje zapytanie tak, że jest ono wykonywane w bezpieczny sposób.
Do XSS masz htmlspecialchars czy addslashes - bo wtedy dane są pokazywane użytkownikowi.


Po Twojej wypowiedzi mam wnioskować, że jeśli wrzucam dane z formularza do bazy danych to wystarczy na zmienną tekstową nadać htmlspecialchars(), na liczbę intval(), potem bindvalue PARAM_STR/PARAM_INT i to w zupełności uchroni mnie przed sql injection oraz xss ?
Go to the top of the page
+Quote Post
Turson
post 25.11.2013, 19:55:23
Post #4





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Przed XSS możesz się bronć się przy wyświetlaniu danych z bazy, a nie przy ich zapisie.
Czy zupełnie obroni? Nic nigdy nie jest bezpieczne na 100% smile.gif

Ten post edytował Turson 25.11.2013, 19:56:19
Go to the top of the page
+Quote Post
Majkelo23
post 25.11.2013, 20:04:28
Post #5





Grupa: Zarejestrowani
Postów: 226
Pomógł: 17
Dołączył: 13.02.2012

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


No dobra, tylko jeśli ja będę w swoim kodzie 20 razy używał np. $row['text'] to również 20 razy będę musiał tą zmienną przelecieć przez htmlspecialchars - czy nie prościej i krócej byłoby sprawdzić wartość tej zmiennej raz po stronie zapisu do bazy i przy wyciąganiu już się tym nie przejmować ?
Go to the top of the page
+Quote Post
nospor
post 25.11.2013, 20:54:55
Post #6





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




Wkladasz do bazy to robisz escapowanie, czyli standard PDO, nic nie musisz robic.
Wyswietlasz, uzywasz htmlspecialchars i chronisz sie tak przed XSS

To tak w skrocie.
Owszem, mozesz sobie dane filtrowac przed wlozeniem do bazy, ale to tez zalezy od calej masy rzeczy. W skrocie ma to wygladac jak napisalem w dwoch poczatkowych linijkach


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

"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
c1chy
post 25.11.2013, 20:57:15
Post #7





Grupa: Zarejestrowani
Postów: 72
Pomógł: 16
Dołączył: 21.06.2013

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


samo PDO nie jest remedium na brak błędów w kodzie, ale wystarczy że będziesz korzystał z prepared statements i wszystko powinno być ok. Co do XSS samo htmlspeialchars czasem nie wystarcza (głównie z powodu złego użycia), możesz poszukać w sieci tutoriali do xss i przetestować swoją aplikację wobec wszystkich dostępnych technik.


--------------------
devstrefa.wordpress.com
Go to the top of the page
+Quote Post
Turson
post 25.11.2013, 20:58:19
Post #8





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


Cytat(Majkelo23 @ 25.11.2013, 20:04:28 ) *
No dobra, tylko jeśli ja będę w swoim kodzie 20 razy używał np. $row['text'] to również 20 razy będę musiał tą zmienną przelecieć przez htmlspecialchars - czy nie prościej i krócej byłoby sprawdzić wartość tej zmiennej raz po stronie zapisu do bazy i przy wyciąganiu już się tym nie przejmować ?

Powiedzmy, że będziesz chciał potem coś wyszukać, porównać itd, to wtedy np. dane z formularza przed porównianiem czy wyszukaniem będziesz też musiał przeprawdzić przez tą procedurę, aby znalazło wyniki
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: 18.07.2025 - 18:25