Originariamente inviato da oly1982
ecludendo l'utilizzo del PDO...

il filtro fatto con trim(addslashes(htmlentities($nome))) non è corretto.

- SE DEVI INSERIRE UNA STRINGA IN UN CAMPO VARCHAIR/TEXT DEL DB
è necessario verificare che get_magic_quotes sia impostata su OFF (in caso contrario eseguite lo stripslashes) ed eseguire mysql_real_escape_string()
Codice PHP:
<?php
function EscapeString($string)
{
    if(
get_magic_quotes_gpc())
    {
        
$string stripslashes($string);
                return 
mysql_real_escape_string($string);
    }
    else
    {
        return 
mysql_real_escape_string($string);
    }
}
?>
Fonte: http://www.mtxweb.ch/php_learn/?p=864

- PROBLEMI CON LO CHARSET
vi deve essere una coerenza fra charset della pagina (impostata con metatag) e del db
pertanto in fase di estrazione dovrai unicamente utilizzare sripslashes per rimuovere gli slash inseriti in fase di INSERT

- ULTERIORI FILTRI
in fase di stampa a video potresti voler "immunizzare" il codice presente nel db.

Ad esempio se nel db hai salvato dell'HTML che vuoi venga stampato a video ed interpretato non dovrai fare nulla (ad esempio un post di un blog salvato nel db e formattato in HTML).

Se al contrario vuoi che l'HTML non sia intepretato ma semplicemente stampato a video (come accade con i post in questo forum) utilizzerai htmlspecialchars()
che trasforma < > & " ' nelle relative entità HTML quindi il codice (HTML / JS/ ETC ETC) verrà visualizzato e non intepretato.

Se invece vuoi rimuovere del tutto i tags utilizzerai striptags()... ma, ad esempio, in un forum come questo sarebbe paradossale eliminare del tutti i tag postati dagli utenti che si troverebbero impossibilitati a postare codice...

htmlentities() è una funzione più "complessa" e serve per convertire tutti i caratteri nell'entità HTML a secondo dello charset indicato. Questa è utilizzata quando vi è una discrepanza fra lo charset della pagina e quello del db (ad esempio quando si ha a che fare con arabo, cinese, etc etc).

-------------

Come puoi capire conoscendo le funzioni e il loro scopo devi applicare quelle opportune e non fare un'accozzaglia generale.
Tieni presente che quello che ti ho detto è una sintesi molto succinta...
scusami sono nuovo sull'aspetto sicurezza per cui meglio sbagliare adesso
comunque il magic non è attivo sono sicuro perchè ho fatto la prova.
se non ho capito male
quando mando l'utente manda nel db
devo filtrare con addslashes
quindi un testo del tipo "quell'amica" nel db sarebbe "quell\'amica" giusto? poi per stampare a video devo fare stripslashes() per eliminare \
domanda: magic real cosa fa di preciso non ho capito...

quando un utente manda nel motore di ricerca
in questo caso l'utente interroga un WHERE DELLA QUERY..qui occorre addslashes ma non c'è bisogno di strip?

ultima cosa
e se i post sono destinati ad una mail? vale lo stesso discorso?