Disinfetta l'output in Rails
-
03-07-2019 - |
Domanda
Qual è la soluzione migliore per disinfettare l'output HTML in Rails (per evitare attacchi XSS)?
Ho due opzioni: plugin white_list o metodo sanitize da Sanitize Helper http: //api.rubyonrails.com/classes/ActionView/Helpers/SanitizeHelper.html . Per me fino ad oggi il plugin white_list ha funzionato meglio e in passato Sanitize era molto difettoso, ma come parte del Core, probabilmente sarà in fase di sviluppo e sarà supportato per un po '.
Soluzione
Penso che il metodo h helper funzionerà qui:
<%= h @user.profile %>
Questo eviterà le parentesi angolari e quindi neutralizzerà qualsiasi JavaScript incorporato. Naturalmente questo eliminerà anche qualsiasi formattazione che i tuoi utenti potrebbero usare.
Se vuoi formattare, forse guarda markdown.
Altri suggerimenti
Raccomando http://code.google.com/p/xssterminate/ .
Personalmente penso che non sia una piccola decisione accettare qualsiasi voce HTML in qualsiasi app web. Puoi testare i tag nella lista bianca / nera quanto vuoi, ma a meno che tu non stia testando l'annidamento corretto, qualcuno potrebbe inserire una serie di tag di chiusura, ad esempio
</td></tr></span></div>
e rovina davvero il tuo layout.
Solitamente darei alle persone qualcosa come Textile per inserire il loro markup, poiché preferirei passare il tempo a lavorare sulla logica aziendale piuttosto che sull'analisi HTML.
Ovviamente, se questa voce di testo è più fondamentale per la tua app (come ad esempio per StackOverflow), probabilmente dovresti prestare maggiore attenzione a far scorrere manualmente la tua.