Cytat(wpaski @ 7.10.2012, 14:24:08 )

Czy taka funkcja zabezpiecza dane które mają być zapisywane do bazy danych? Dodatkowo korzystam z PDO.
public function allowedcharacters($data) {
$data = filter_var($data, FILTER_SANITIZE_STRING);
if (preg_match("/^[a-z ęóąśłżźćń]+$/", $data) == false) { return "Niedozwolone znaki";
}
}
Zabezpiecza? W sensie przed SQL injection? Nie, nie zabezpiecza. Przed wprowadzeniem do bazy innych niż litery i spacja znaków? Tak. Tzn. sama w sobie nie, ale jeśli będzie odpowiednio użyta z funkcją wywołującą zapytanie to tak. Naprawdę masz konieczność takiego ograniczania znaków?
Jeśli chodzi tylko o ochronę przed SQL injection to PDO::prepare w połączeniu z PDOStatement::bindParam jest absolutnie wystarczające, bo zostało stworzone w celu zabezpieczenia przed takim atakiem. Nie trzeba danych dodatkowo filtrować.
Co masz dokładnie na myśli pisząc o zabezpieczaniu?
Cytat(wpaski @ 7.10.2012, 14:24:08 )

Takie jeszcze poboczne pytanie co dokładnie robi flaga FILTER_SANITIZE_STRING bo z tego co wyczytałem, to usuwa znaki html'owskie ale co jeszcze usuwa?
Tu masz opis wszystkich filtrów:
http://www.php.net/manual/en/filter.filters.php. FILTER_SANITIZE_STRING cytuję: "Strip tags, optionally strip or encode special characters." czyli czyści tagi, opcjonalnie czyści lub koduje specjalne znaki. Żeby filtrował te opcjonalne znaki, trzeba dodać odpowiednią flagę (z kolumny "flags" na listingu).