Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] XSS i SQL injection: funkcja walidująca stringa przed wstawieniem go do zapytania sql, wiem, że było milion razy, nie bijcie :)
lukasz_matysek
post
Post #1





Grupa: Zarejestrowani
Postów: 33
Pomógł: 2
Dołączył: 25.03.2010

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


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


Ten post edytował lukasz_matysek 19.05.2010, 17:41:56
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
croc
post
Post #2





Grupa: Zarejestrowani
Postów: 706
Pomógł: 108
Dołączył: 12.03.2010

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


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?
Go to the top of the page
+Quote Post
lukasz_matysek
post
Post #3





Grupa: Zarejestrowani
Postów: 33
Pomógł: 2
Dołączył: 25.03.2010

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


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
Go to the top of the page
+Quote Post
croc
post
Post #4





Grupa: Zarejestrowani
Postów: 706
Pomógł: 108
Dołączył: 12.03.2010

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


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.
Go to the top of the page
+Quote Post
lukasz_matysek
post
Post #5





Grupa: Zarejestrowani
Postów: 33
Pomógł: 2
Dołączył: 25.03.2010

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


Rozumiem. Zatem czekają mnie lekkie przeróbki. Dzięki za pomoc.
Go to the top of the page
+Quote Post
bełdzio
post
Post #6





Grupa: Zarejestrowani
Postów: 690
Pomógł: 81
Dołączył: 6.04.2005
Skąd: Szczecin

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


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ę?


--------------------
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 Aktualny czas: 20.08.2025 - 04:35