Witajcie phpowcy, tworzę serwis internetowy.
Wszystko ładnie idzie do przodu, ale jak zawsze musi pojawić się nie mały problem.
Chodzi o bezpieczeństwo skryptów. Sporo czytałem na ten temat w necie.
Funkcje addslashes, preg_match, mysql_real_escape_string ale jakoś nie mogę się połapać...
Więc tak... na stronie jest formularz, który umożliwia dodanie parę wpisów, wpisów różnych typów.
Zmienne typu Varchar, INT i Text. Jak widzicie jest połączenie z bazą danych. Cały mechanizm
opiera się na zmiennych sesyjnych.
Zmienne formularza przechowywane są w sesji
...i teraz mam pytanko, jak zabezpieczyć taki system?
1) Czy każda zmienna sesyjna musi być od samego początku przefiltrowana? czy można ją dopiero
przefiltrować przed samym dodaniem do bazy?
2) Jeśli w polu textarea znajduje się cudzysłów to po użyciu funkcji addslashes do bazy danych do
odpowiedniego pola dodaje mi się np taki wpis: \\\\\\\\\\\\\\\"
Co mam zrobić, żeby był tylko jeden znak ucieczki?
Użyłem funkcji str_replace, ale nie pomogło.
Czy taki zapis jest zły? czy lepiej jak będzie jeden znak ucieczki?
3) Jak powinien wyglądać bezpieczny wpis do bazy danych?
Chodzi mi konkretnie o te znaki: ` ~ ! @ # $ % ^ & * ( ) - _ = + [ ] { } ; ' \ : " | , . / < > ?
które z nich w bazie danych muszą być poprzedzone znakiem ucieczki?
4) Walidacja formularza polega na tym, że użyłem funkcji preg_match, która sprawdza poszczególne
pola, czy nie zawierają pewnych znaków.
np. pole o maksymalnej długości dwóch znaków (INT) jest sprawdzane pod kątem zawierania wyłącznie
cyfr. Jeśli wpiszemy jakikolwiek inny znak niż alfanumeryczny to wyświetlany jest stosowny komunikat
i trzeba poprawić to pole.
Czy takie zabezpieczenie wystarczy, czy mimo wszystko trzeba po poprawnym wypełnieniu tego pola
jeszcze raz przefiltrować tą zmienną? w dalszej części skryptu dodać strip_tags(addslashes(...
dla tej zmiennej?
Bardzo proszę o pomoc bo mimo wszystko walcząc z tym 5 dni nie mogę sobie poradzić.
