Il tuo codice, nel contesto in cui l'hai esposto, è corretto.
Tuttavia occorre precisare una cosa: ogni parte del tuo progetto deve essere corretto, e deve esserlo anche al di fuori del contesto in cui lo stai analizzando, nei limiti del possibile.
perché se da qualche parte hai:
codice:
mysql_query("insert into user ('login','pass') values('$login', '$pass')" );
questo codice non lo è. E non lo è a prescindere se $login e $pass li filtri o li controlli da qualche altra parte prima. Non lo è e basta.
Se invece hai questo:
codice:
mysql_query("insert into user ('login','pass') values('".myFilter($login)."', '".myFilter($pass)."')" );
Hai altri tipi di problemi. Sebbene potrebbe valutarsi come corretto (una volta assicuratosi che la funzione myFilter funzioni a dovere) è ancora migliorabile. Perché è un approccio che ti predispone ad errori. Questo non è un caso da sottovalutare. Sebbene credi ci sia una possibilità su un diecimila che possa accadere di dimenticarti di usare myFilter, prendi atto che nella tua vita scriverai più di diecimila query. E comunque le probabilità che ciò accada non sono così basse .
Inoltre c'è ancora una falla. Tu dici "ogni dato che viene inserito da un utente, prima di essere inserito nel database passa in mezzo a queste 2 funzioni". Ma le query possono anche usare parametri non direttamente presi dall'utente. Immagina, per esempio, la tua tabella utenti. Immagina che ogni utente abbia inserito la città. E immagina che nel tuo sito vuoi far vedere tutti gli utenti che abitano nella stessa città dell'utente loggato.
codice:
$id = $_SESSION['user_id'];
$res = mysql_query("select citta from user where id = $id");
$row = mysql_fetch_assoc($res);
$citta = $row['citta'];
$res = mysql_query("select * from user where citta = '$citta'");
// while ecc. ecc.
In questo caso banale, dai per buono un dato inserito da un utente precedentemente. Che è male.
Io posso aver inserito come città:
codice:
Milano' UNION SELECT * from tabella_sensibile
Il tuo flusso ti funziona correttamente durante l'insert, ma non quando fai girare la mia sporcizia in giro per il database e nelle select.
E guarda che questa falla si scopre in un lampo. Basta accorgersi che gli utenti che abitano a L'Aquila rompono delle pagine, e il resto vien da se.
In definitiva. NO.
Il peggio che può accaderti non sono solo stringhe vuote nel database :-)
Il corretto approccio sarebbe quello di usare degli strumenti che ti obbligano a fare le cose per bene, e di usare i prepared statement sempre e comunque, per ogni dato. Stare a pensare ad ogni query cosa viene dall'utente e cosa no, ti predispone ad errori che sono:
- statistici (prima o poi ti capita di perdertene uno per strada)
- fisiologici (specifiche che cambiano. Un dato prima era statico e dopo 6 mesi lo rendi dinamico non adeguando tutto il resto del codice)