[supersaibal]Originariamente inviato da mircov
Salve ragazzi!
Mi serve più che altro un parere su come comportarmi.
Sappiamo bene che alcuni carateri possono disturbare il db in quanto lo espongono ad attacchi di vario tipo.
Io vi chiedo: come mi comporto nei confronti di questi caratteri?

Le possibilità che ho preso in considerazione sono 3:
1) Li trasformo in spazi bianchi
2) Li trasformo in entità HTML
3) Mostro un messaggio di errore all'utente deciendogli che non possono essere inseriti

Vi chiederete: il problema dov'è?

Bhe, il problema sta nel fatto che finchè si tratta di inserire uno user o una password problemi non ce ne sono. Ma quando devo inserire una descrizione o cmq un testo che necessiti dell'utilizzo di tali caratteri?
Io faccio anche dei controlli sulla lunghezza delle stringhe e capirete che nel momento in cui vado a trasformare questi caratteri il numero stesso di caratteri "inseriti" aumenta".
E ci sono anche altre fattispecie. Insomma, voi come vi comportereste? [/supersaibal]
Trasformare in entità HTML prima dell'inserimento nel DB non ha senso. E' giusto farlo quando dal DB prelevi questi dati che andranno poi mostrati in output al browser.

Per quel che riguarda i caratteri dannosi (potenzialmente), la scelta più flessibile è probabilmente quella di utilizzare le funzioni di escape del tuo database (mysql_real_escape_string() ad esempio), facendo attenzione anche, ad esempio, al discorso dei magic_quotes (per evitare di fare l'escape due volte, e tenendo inoltre presente che le funzioni di escape agiscono su caratteri specifici. Nel caso di mysql, vengono filtrati apici e virgolette, ma non i caratteri % e _ (usati nelle query con LIKE).

Quanto scritto è valido nel caso tu debba inserire, ad esempio da un form, uno o piu campi di lunghezza variabile che dovranno contenere del testo di vario tipo (pensa ad esempio ad un sistema di gestione di news, o a mille altri esempi simili).
Qui trovi delle idee per proteggersi dalla sql injection:
http://freephp.html.it/articoli/view...olo.asp?id=123
ma il concetto di fondo, cioè filtrare o comunque validare l'input degli utenti, andrebbe applicato sempre (es: esecuzione di comandi di sistema, dare un nome ai file che vengono uploadati via PHP, ecc.ecc.)