![]() |
![]() ![]() |
![]() |
![]()
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 i w całości przeszło do bazy danych bez jakiegokolwiek backslasha. To samo z htmlowymi znakami: 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 |
|
|
![]()
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. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 17 Dołączył: 13.02.2012 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. 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 ? |
|
|
![]()
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% ![]() Ten post edytował Turson 25.11.2013, 19:56:19 |
|
|
![]()
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ć ?
|
|
|
![]()
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 |
|
|
![]()
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
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 4 291 Pomógł: 829 Dołączył: 14.02.2009 Skąd: łódź 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ć ? 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 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 18.07.2025 - 18:25 |