2011-09-25 15 views
5

Im usando jQuery Markitup per consentire agli utenti di inserire html ... In modo che possano roba ingresso come:Come uscire da html?

<h1>Foo</h1> 
<p>Foobar</p> 

Tuttavia, stavo guardando http://railscasts.com/episodes/204-xss-protection-in-rails-3 e deciso di provare questo pezzo di codice all'ingresso:

<script>alert('test');</script> 

Con mia grande sorpresa, quando ho inviato il modulo e aggiornato la pagina, è uscito il riquadro di avviso. Questo è un rischio per la sicurezza!

Questo è quello che ho in mio punto di vista:

<div><%= comment.description.html_safe %></div> 

È possibile che questo rende qualsiasi html, ma è anche soggetta a XSS. Così ho provato:

<div><%= html_safe(comment.description).html_safe %></div> 

ma quanto sopra non rende alcun html. In realtà visualizza l'html come text, che non è il comportamento desiderato.

Ho bisogno di rendere l'html e allo stesso tempo di proteggermi da xss. Come faccio a fare questo?

risposta

0

Prova

<%= sanitize(comment.description) %> 

Aggiornamento:

per rimuovere tutti i tag utilizzano strip_tags

+0

Yea disinfettare esegue il rendering html, e non esegue l'avviso dal JS. Interessante. Ma quali implicazioni ha questo? Stavo guardando http://railscasts.com/episodes/27-cross-site-scripting e Ryan B afferma che "non è così approfondito, dal momento che non sfugge ad ogni tag html, che non è altrettanto sicuro". .. –