Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Filtrowanie danych
Forum PHP.pl > Forum > Przedszkole
plej
Witam mam taki kod

  1. class filtr{
  2.  
  3. public static function filtruj($zmienna){
  4. $zmienna=trim($zmienna);
  5. $zmienna=htmlspecialchars($zmienna);
  6. $zmienna=addslashes($zmienna);
  7. include('db.php');
  8. $zmienna=mysqli_real_escape_string($con, $zmienna);
  9. return $zmienna;
  10. }
  11.  
  12. public static function sprawdz($rodzaj, $zmienna)
  13. {
  14. switch($rodzaj){
  15. case "tytul":
  16. return (strlen($zmienna) < 5 or strlen($zmienna) > 200 )? 0:1;
  17.  
  18. break;
  19. }
  20. }
  21.  
  22. }
  23.  
  24. class fnc_add_all
  25. {
  26. $filtr = new filtr();
  27. $nazwa = filtr::filtruj($_POST['nazwa']);
  28. $nazwa = filtr::sprawdz("tytul", $nazwa);
  29. if($nazwa == 0){
  30. echo "<br>blad";
  31. }else{
  32. echo "<br>ok";
  33. }
  34. }



i chciałbym się zapytać czy to dobre filtrowanie?
czy coś jest nie tak, czy czegoś mu brakuje, czy tez może żle to robie?

Ogólnie działa. Po długiej przerwie w programowaniu staram się uczyć dalej.


Z góry dzięki.
bostaf
Cytat(plej @ 1.06.2017, 20:19:11 ) *
chciałbym się zapytać czy to dobre filtrowanie?

Na pierwszy rzut oka i generalnie to nie - za dużo tam wszystkiego i nie za bardzo wiadomo jakiemu celowi ma to konkretne filtrowanie służyć. Filtrowanie/eskejpowanie/czyszczenie musi mieć konkretny cel. Jednym algorytmem nie da się targetować wszystkich celów. Np. filtrowanie pod kątem wyświetlania tekstu w htmlu będzie inne niż filtrowanie pod kątem przesyłania danych do bazy.

Ja zgaduję, że ty chcesz zabezpieczyć dane z formularzy które lecą do bazy. W takim przypadku samo mysqli_real_escape_string wystarczy. (później dojdziesz do jeszcze lepszej parametryzacji) No i może trim. Chodzi o to, że to co user napisze Ci w textarea nijak nie skrzywdzi bazy danych. Baza ma immunitet na hakowanie javascriptem i innymi sztuczkami. Bazę można uszkodzić jedynie błędnie skonstruowanymi zapytaniami, którym mysqli_real_escape_string (a docelowo parametryzacja) i pozamykane apostrofy/cudzysłowy całkowicie zapobiegają.
Tu zresztą są różne opcje - albo oczyszczać przed wprowadzeniem albo przy wyprowadzaniu/pobieraniu.

Filtr htmlspecialchars wykorzystasz podczas pobierania danych z bazy w celu wyświetlenia ich HTMLem.

Co do addslashes to ja nie wiem do czego to komu potrzebne (ale chętnie bym się dowiedział). Kiedyś, jak były kombinacje z magic_quotes i ext_mysql to się z tego korzystało, ale teraz...?

Inna uwaga odnośnie budowy Twojej klasy. Tam inkludujesz plik i połączenie z bazą - unikaj czegoś takiego już na początku. Myśl o tym, żeby klasa i funkcja była samodzielna, a wszelkie zależności pobierała z zewnątrz, za pomocą przeznaczonego do tego mechanizmu czyli konstruktora. Inkludowanie plików w klasie jest niemoralne, złe i wyklęte. Po trzykroć hańba wink.gif

Nie wiem czy nie za krytycznie Cię oceniłem. Jeśli tak to wygląda to nie powinno bo nie miałem takiego zamiaru. Ogólnie mi się podoba Twój kierunek - eksperymentowanie to podstawa. Im więcej się popsuje tym więcej się nauczy wink.gif
plej
Bardzo dobrze opisałeś.

Na pewno wyciągne wnioski i pokombinuje dalej.

Przejde na funkcje prepare i bindValue


Dzięki : )
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.