Ultimamente mi trovo molto impegnato a codificare un sistema di gestione ordini. Ho scelto di programmare un’interfaccia web utilizzando il php come linguaggio di base, per far comunicare ed interagire l’utente con un database MySQL.
Come si potrà immaginare, in un software del genere, l’interazione utente <=> applicazione è tutt’altro che statica. L’utilizzatore finale è chiamato a riempire miriadi di form.
Una cosa sicura in questi casi è che l’utente sbaglierà! Errori spesso involontari, altre volte pilotati da un desiderio di far male all’applicazione. Sono ben note le vulnerabilità del linguaggio SQL e si sa che una variabile $_POST[‘qualcosa’] mal concepita può creare vari problemi all’applicazione, ed in certi casi recare danno alla vista stessa del database.
Altre volte può capitare che non sia la vita del database ad avere problemi, ma l’interazione applicazione <=> utente. Si pensi al caso in cui l’utente posti un testo che dopo dovrà visualizzare in formato HTML. Determinati caratteri, in codice HTML ed in funzione di un determinato charset devono avere un certo codice e spesso chi riempie il form non lo sa.
Il modo migliore per risolvere questi problemi è creare delle espressioni regolari. Flussi di controllo dove si impongono regole rigide alle variabili.
Spesso risulta però molto più facile, veloce e meno invasivo, pilotare di nascosto il posting. Modificare i caratteri *cattivi* che l’utente (consapevolmente o meno) scrive nei vari form che riempie.
Attraverso l’uso delle funzioni il PHP ci aiuta moltissimo: scriveremo una sola volta la funzione di replace dei caratteri. Dopo di che, sarà cura del coder applicarla dove necessario.
$trova[] = "&";
$trova[] = "’";
$trova[] = "’";
$trova[] = "©";
$trova[] = "®";
$trova[] = "€";
$trova[] = "à";
$trova[] = "è";
$trova[] = "é";
$trova[] = "ì";
$trova[] = "ò";
$trova[] = "ù";
$trova[] = ‘"’;
$trova[] = "<";
$trova[] = ">";
$trova[] = "
";
$rimpiazza[] = "&";
$rimpiazza[] = "’";
$rimpiazza[] = "’";
$rimpiazza[] = "©";
$rimpiazza[] = "®";
$rimpiazza[] = "€";
$rimpiazza[] = "à";
$rimpiazza[] = "è";
$rimpiazza[] = "é";
$rimpiazza[] = "ì";
$rimpiazza[] = "ò";
$rimpiazza[] = "ù";
$rimpiazza[] = """;
$rimpiazza[] = "<";
$rimpiazza[] = ">";
$rimpiazza[] = "<br />";
return str_replace($trova,$rimpiazza, $t);
}
Ricordate che il PHP è un linguaggio interpretato *from top to bottom*. Per cui, il primo e l’ultimo elemento dell’array, dovranno sempre rimanere tali.
La funzione vi permette anche di potervene fregare se il vostro hoster, che non vi da accesso al php.ini, ha deciso (chissà poi per quale motivo) di impostare il magic_quotes_gpc in off. E’ cosa rara, ma c’è ancora chi persiste a mantenere la funzione disattivata.
Aggiungere nuove voci di rimpiazzo è facilissimo. E la funzione si presta anche per utilizzi ludici . Avete presente quei form in cui, a determinate corrispondenze di caratteri compiaiono le emoticons in posting? Spesso a volentieri il tutto è fatto con un semplice str_replace!
Sia chiaro che una funzioncina del genere, mai e poi mai potrà fare del vostro software un applicativo sicuro. Ma in modo facile, eviterete qualche problema…
NB: Il codice è applicabile tout court per software che usano il linguaggio XHTML 1.0 Transitional ed un charset iso-8859-1. Per charset o DOCTYPE diversi, parte dell’array potrebbe essere superfluo se non errato.
Regolatevi di conseguenza .
si potrebbe risparmiare usando htmlspecialchars o htmlentities volendo…
così si risolve anche il problema del charset.
Sisi, per alcuni caratteri il core del php mette a disposizione funzioni sue, migliori di questa, perchè hanno il parametro opzionale charset.
Per quello che devo fare io preferisco racchiudere tutto in un unica funzione. In questo modo gestisco caratteri non supportati dalle funzioni del core, come ® ad esempio…
Ed anche i break di riga.
Ovvio che in caso di richiamo testo per modifica, per il break è giusto creare una funzione di ritorno: ovvero che modifichi i br in
Eheheh … Sempre a spippolare in ufficio!
Gh. E una volta tanto che una cosa mi serve per ufficio e per piacere…
@donzo sul post sopra ti ho lasciato una richiesta di aiuto x dblog
Spero tu capisca la domanda e io poi veda la risposta
Ma se non hai MySQL non è possibile…
al solito
ciao e grazie di nuovo
@ ZoneX: in che senso?!
forse ho capito male ma io mi riferivo ai server e ai database che offrono a secondo che sia su piattaforma Window o linux.MySQL gira solo su linux?
Mi sbaglio o mi confondo
Se è OT scusa ho letto male.
Ciao x ora
Ho riletto meglio, sorry del c…o
Ho sbagliato io e penso che a secondo del database si può implementare
In questo caso tu parlavi di cosa hai fatto e come.
Ciao