Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] XSS i SQL injection: funkcja walidująca stringa przed wstawieniem go do zapytania sql
Forum PHP.pl > Forum > Przedszkole
lukasz_matysek
Tak jak w temacie, potrzebuję potwierdzenia że idę w dobrym kierunku.

Na bazie kilkunastu przeczytanych postów i artykułów zbudowałem funkcję walidującą stringi przed podaniem ich do zapytania. Proszę o jej sprawdzenie. Czekam na surową i konstruktywną krytykę ze wskazaniem ewentualnych błędów w rozumowaniu:)

  1. function preparePostTable()
  2. {
  3. foreach ($_POST AS $klucz => $v)
  4. {
  5. $wartosc= trim($v);
  6. $v=strip_tags($v);
  7. $v=htmlspecialchars($v, ENT_QUOTES);
  8. $_POST[$klucz]=$v;
  9. }
  10. }
croc
Dzisiaj to już komuś pisałem - nie wrzucaj danych do bazy z htmlspecialchars. Po drugie ta funkcja moim zdaniem nie jest ldobra, bo ingeruje sama w całą tablicę $_POST. Nie lepiej podawać jej każdą zmienną jawnie, osobno i używać jej dopiero w zapytaniu?
lukasz_matysek
Co do specialchars to się zgodzę, jednak wyjaśnij mi, dlaczego działanie na całej tablicy POST nie jest dobre? z punktu widzenia kodu, lepiej jest dać raz preparePostTable() i potem normalnie zczytywać sobie z posta już przetworzone wartości. Przynajmniej tak ja to widzę smile.gif
croc
Na pewno wygodniej i bezpieczniej o tyle, że nie zapomnisz o żadnej wartości. Jednak tracisz całą kontrolę. Inaczej obsłużyłbym np. dane liczbowe (intval( )) czy zmiennoprzecinkowe (floatval( )). Istnieje też niebezpieczeństwo, że z jakiegoś powodu funkcja zostanie wywołana dwa razy. Twoja funkcja to tzw. funkcja działająca w miejscu, przeważnie ich używanie nie jest dobrym rozwiązaniem.
lukasz_matysek
Rozumiem. Zatem czekają mnie lekkie przeróbki. Dzięki za pomoc.
bełdzio
dodaje jeszcze ochronę przed ldap injection, xpatch injection etc :| dane filtruje się zgodnie z ich przeznaczeniem, a nie wszystkimi możliwymi funkcjami po co mysql_re... jeśli zmienna nie będzie leciała do bazy tylko na stronę?
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.