Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Czy addslashes i htmlspecialchars wystarczy?
Forum PHP.pl > Forum > PHP
Utilaft
Witam. Get filtruje mysql escape string, a formularze addslashes i htmlspecialchars

Czy to wystarczy? i czy to jest dobre rozwiązanie?
sajegib
dobrze użyć regexów i preg_match
cudny
Jeśli dokładnie wiesz co ma się znajdować w otrzymanych danych ( float, int, długość znaków, itp ) to przefiltruj to pod tym kontem.
mysql real escape string wystarczy - ale co ma znaczenie czy dajesz to na _GET czy _POST ?
Na wszystko dawaj mysql real escape string !

Do tego nie wiem czy htmlspecialchars() jest Ci do czegoś potrzebne, jeśli nie wyświetlasz tego potem na stronie - no chyba, że chcesz wyświetlić, ale to bardziej pomyślał bym o przefiltrowaniu tego przez DOM'a, ewentualnie dał strip_tags()

Validacja to podstawa
Sephirus
Popieram przedmówców ale należy odróżnić dwie rzeczy - walidację od filtrowania. Ogólnie zasady walidacji są takie:

- Jeśli parametr ma mieć określoną wartość lub jedną z tablicy wartości to sprawdzaj dla niego poprzez == i in_array czy tak właśnie jest. Nie ma sensu dodawać tu inne walidacje.

  1. // parametr status powinien mieć wartości 0 lub 1
  2.  
  3. if(!in_array($_GET['status'], array(0,1)) {
  4. die('Niepoprawna wartość statusu!');
  5. }
  6.  
  7. // ...


- Podobnie jeśli parametr jest numeryczny i powinien należeć do jakiegoś dużego zakresu to sprawdzaj go w taki sposób:

  1. // parametr wiek powinien mieć wartości od 18 do 99
  2.  
  3. if(!is_numeric($_GET['wiek'] || $wiek < 18 || $wiek > 99) {
  4. die('Niepoprawna wartość parametru wiek');
  5. }
  6.  
  7. // ...


- Ogólne dane liczbowe sprawdzaj poprzez odpowiednie funkcje typu is_int, is_float itp.

- Takie dane jak na przykład daty musisz odpowiednio walidować wykorzystując do tego na przykład obiekt klasę DateTime z odpowiednim formatowaniem - będzie krzyczała jak data jest niepoprawna

- Ciągi znaków różnego rodzaju powinny być sprawdzane pod kątem ataków XSS (wstrzyknięty kod HTML tam gdzie go być nie powinno itp), możesz tu użyć różnych metod, wyrażeń regularnych by sprawdzić czy ciąg zawiera wyłącznie dozwolone znaki, sprawdzać długość itd. Dodatkowo możesz dla konkretnych ciągów (adres e-mail, adres http itp) używać PHPowego filter_var.

Filtrowanie z kolei to zabieg mający na celu zabezpieczyć dane przed wrzuceniem do bazy danych. W tym celu stosuje się addslashes (przestarzale), mysql_real_escape_string i podobne - wszystkie mają na celu to aby zabezpieczyć bazę. Jeśli przykładowo w danym parametrze mogą występowac prawie dowolne znaki, html, cudzysłowy itd to przymusem jest je filtrować.

Strip_tags czyści z ciągu tagi html (usuwa je) - jest to przydatne na ataki XSS.
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.