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.
// parametr status powinien mieć wartości 0 lub 1
die('Niepoprawna wartość statusu!'); }
// ...
- Podobnie jeśli parametr jest numeryczny i powinien należeć do jakiegoś dużego zakresu to sprawdzaj go w taki sposób:
// parametr wiek powinien mieć wartości od 18 do 99
if(!is_numeric($_GET['wiek'] || $wiek < 18
|| $wiek > 99
) { die('Niepoprawna wartość parametru wiek'); }
// ...
- 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.