Soluzione 1: eliminare i tag selettivamente. [PHP]

A volte dopo un GET o un POST, abbiamo bisogno di eliminare dei tag (x)html selettivamente (alcuni sì e altri no); una soluzione è usare strip_tags() direttamente da PHP.

Strip_tags() accetta in ingresso due parametri, uno obbligatorio, la stringa da controllare, e uno opzionale che è quello che ci interessa.

In pratica si crea una semplice stringa contenente i tag da mantenere nel testo, ad esempio:

$eccezioni = '<p><strong><em><a><img>';

con queste eccezioni, si possono gestire gli elementi (x)html per dei semplici form di ingresso dati, in cui sono stati usati elementi di formattazione come la suddivisione in paragrafi, l'uso de grassetto e dell'inclinato, le ancore e le immagini. Da notare che non serve specificare anche i tag di chiusura nella stringa delle eccezioni.

Quindi se la nostra stringa in ingresso contiene altri elementi (x)html, in uscita avrà solo quelli contenuti tra le eccezioni, ad esempio:

$eccezioni = '<p><strong><em><a><img>';
echo strip_tags($_POST['messaggio'], $eccezioni);

Da dire subito che:

  • l'esempio è solo ciò che è, ovvero un esempio, ma ha tutte le funzionalità del caso, ovviamente i dati in ingresso via POST o GET vanno trattati in altro modo per evitare altre spiacevoli sorprese;
  • strip_tags() non elimina gli attributi presenti all'interno degli elementi (x)html, quindi è bene stare attenti sempre e comunque ai sistemi di Cross Site Scripting;

Se si usa una semplice textarea per immettere i dati in ingresso è probabile che qualche "simpaticone", la sfrutti per giochi di questo genere <strong onmouseover='<script>alert("Booom!")</script>'>passa il mouse qui sopra</strong> o peggio ;) in casi di questo genere è meglio usare codici di formattazione come BBcode, che impediscono il Cross Site Scripting, almeno a questo livello.

Ma se al posto di una semplice TextArea si usa un sistema più complesso come una Rich TextArea, in cui si vede la stringa già formattata e non il codice di formattazione, allora strip_tags() appare necessario proprio per mantenere questa formattazione.

Ovvio che anche in questo caso, l'utente smaliziato può sempre disabilitare il motore di Javascript dal proprio browser e usare il controllo come una semplice textarea e fare il suo tentativo di cross site scripting; in questo caso è sempre bene verificare che l'utente abbia il Javascript abilitato prima di continuare a fargli usare la nostra paginetta.

inviato 9 anni fa
Marco Grazia
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda