Cross-site scripting: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m fix ref
Riga 22:
== Come difendersi ==
=== Escape degli input ===
Il Metodo più sicuro per un programmatore, è quello di usare uno delle tre funzioni in php che permettono l'escape dei caratteri html inserite in una stringa. Queste tre importanti funzioni sono: htmlspecialchars(), htmlspecialentities(), strip_tags. Quelle elencate sono tutte sicure, differenziano soltanto l'output, vi faccio vedere:
Il metodo più sicuro è adottare, da parte del programmatore, un'adeguata politica di [[escape]] degli input, allo stesso modo con cui si procede per evitare le [[SQL injection]], eliminando però i tag [[html]] "pericolosi" o non graditi, primi tra tutti quelli di scripting. Più precisamente la tecnica più diffusa e più semplice è trasformare '''<''' e '''>''' rispettivamente in & lt; e & gt;, anche se ciò non è sufficiente in applicazioni che fanno largo uso di [[javascript]]<ref>[http://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet#RULE_.231_-_HTML_Escape_Before_Inserting_Untrusted_Data_into_HTML_Element_Content]</ref>.
<br/><source lang="html4strict">
#HTMLSPECIALCHARS()
echo htmlspecialchars("<script>alert('xss')</script>", ENT_QUOTES);
# L'output sarà: &lt;a href=&#039;test&#039;&gt;Test&lt;/a&gt; dato che converte i caratteri "particolari", in codice html.
 
#HTMLENTITIES
echo htmlentities("I'm <b>bold</b>");
# L'Output sarà di conseguenza: I'm &lt;b&gt;bold&lt;/b&gt;
 
$stringa="<a href="#">Verrò cancellato, lo so</a>anche io<p>ed anche io</p>";
echo strip_tags($text);
#Il particolare output di questa funzione, sarà: <a><p>
#Come potete intuire, strip_tags elimina TUTTO il contenuto, anche quello fuori dai tags html lasciando soltanto i tag d'apertura.
</source><br/>
 
PS=Questa non vuole essere una guida ai tre comandi, ma soltanto uno sguardo, quindi, se dovete attuare controlli sulle stringhe, vi consiglio personalmente di cercare informazioni su quelle tre funzioni
 
=== Aggiornare il browser ===