Scritto da davidonzo il 04/07/2006, in OpenSource
ATTENZIONE!
L'articolo che stai leggendo è stato scritto 918 giorni orsono.
Le informazioni presenti potrebbero non essere aggiornate!
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.L'articolo che stai leggendo è stato scritto 918 giorni orsono.
Le informazioni presenti potrebbero non essere aggiornate!
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.
function rimpiazza( $t = "" ){
$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);
}
$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
. 









