Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Filtrowanie danych, Sprawdzanie danych
plej
post
Post #1





Grupa: Zarejestrowani
Postów: 264
Pomógł: 11
Dołączył: 9.05.2011
Skąd: Gdańsk

Ostrzeżenie: (10%)
X----


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





Grupa: Zarejestrowani
Postów: 374
Pomógł: 79
Dołączył: 6.04.2010
Skąd: Ostrów Wielkopolski

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


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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
plej
post
Post #3





Grupa: Zarejestrowani
Postów: 264
Pomógł: 11
Dołączył: 9.05.2011
Skąd: Gdańsk

Ostrzeżenie: (10%)
X----


Bardzo dobrze opisałeś.

Na pewno wyciągne wnioski i pokombinuje dalej.

Przejde na funkcje prepare i bindValue


Dzięki : )

Ten post edytował plej 1.06.2017, 20:46:52
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.12.2025 - 12:48