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.

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[] = "&amp;";
      $rimpiazza[] = "&#8217;";
      $rimpiazza[] = "&#8217;";
      $rimpiazza[] = "&copy;";
      $rimpiazza[] = "&reg;";
      $rimpiazza[] = "&euro;";
      $rimpiazza[] = "&agrave;";
      $rimpiazza[] = "&egrave;";
      $rimpiazza[] = "&eacute;";
      $rimpiazza[] = "&igrave;";
      $rimpiazza[] = "&ograve;";
      $rimpiazza[] = "&ugrave;";
      $rimpiazza[] = "&quot;";
      $rimpiazza[] = "&lt;";
      $rimpiazza[] = "&gt;";
      $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 : - ) .
Hai trovato l'articolo interessante?
Sottoscrivi il Feed RSS per essere informato automaticamente degli ultimi aggiornamenti!
 
.Commenti rss
# 1
si potrebbe risparmiare usando htmlspecialchars o htmlentities volendo...
così si risolve anche il problema del charset.
Di claudio  (Inviato il 04/07/2006 @ 12:13:50)
# 2
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
Di davidonzo  (Inviato il 04/07/2006 @ 13:24:35)
# 3
Eheheh ... Sempre a spippolare in ufficio! : - D
Di Zizio  (Inviato il 04/07/2006 @ 13:37:07)
# 4
Gh. E una volta tanto che una cosa mi serve per ufficio e per piacere... : - D
Di davidonzo  (Inviato il 04/07/2006 @ 15:11:54)
# 5
@donzo sul post sopra ti ho lasciato una richiesta di aiuto x dblog
Spero tu capisca la domanda e io poi veda la risposta : -
Di zoneX  (Inviato il 09/07/2006 @ 18:21:15)
# 6
Ma se non hai MySQL non è possibile...
al solito : - (
ciao e grazie di nuovo
Di zoneX  (Inviato il 02/08/2006 @ 10:57:33)
# 7
@ ZoneX: in che senso?!
Di davidonzo  (Inviato il 02/08/2006 @ 11:13:47)
# 8
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
Di zoneX  (Inviato il 03/08/2006 @ 11:04:29)
# 9
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
Di zoneX  (Inviato il 03/08/2006 @ 11:12:49)


I commenti possono essere moderati.
Se non lo vedi comparire subito non reinserirlo più volte.
Grazie per la gentile collaborazione.