Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] PDO - ochrona danych
Forum PHP.pl > Forum > Przedszkole
Majkelo23
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? ;>
Turson
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.
Majkelo23
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 ?
Turson
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
Majkelo23
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ć ?
nospor
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
c1chy
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.
Turson
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
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.