2009-08-12 2 views
6

Quali sono le pratiche per prevenire XSS in Ruby on Rails? Ho trovato molti vecchi documenti sul Web e il più delle volte si trattava di utilizzare l'helper h/html_escape per evitare qualsiasi variabile proveniente dagli utenti.Ruby on Rails e prevenzione XSS

ho capito da documenti recenti che nella versione 2.0 e sopra c'è disinfettare metodo che è la pulizia automaticamente l'ingresso dal presunto input dannoso. È sufficiente o stai facendo qualcosa in più per proteggere le tue applicazioni ?

risposta

10

Il Ruby on Rails Security Guide è abbastanza completo sui problemi specifici di Rails che è necessario considerare quando si progetta la sicurezza per il proprio sito Web.

15

Il metodo h è ancora la via da percorrere per sfuggire a tutto l'HTML all'interno di una stringa. Dovresti usare questo metodo ovunque tu stia trasmettendo il contenuto.

<%=h @recipe.description %> 

Questo comportamento verrà cambiata in Rails 3. Ci tutto l'output sarà sfuggito di default e sarà necessario specificare esplicitamente di non sfuggire. Nel frattempo, se ti dimentichi spesso di utilizzare questo metodo h, potresti provare lo Safe ERB plugin.

Il metodo sanitize è un buon metodo per rimuovere selettivamente determinati tag dal contenuto. Ad esempio, se si desidera consentire all'utente di evidenziare in grassetto e in corsivo il proprio output insieme all'aggiunta di collegamenti, è possibile farlo.

<%= sanitize @recipe.description, :tags => %w[b i a], :attributes => %w[href] %> 

Come accennato Oliver, controlla la Security Guide per ulteriori informazioni.

4

Per quanto riguarda le migliori pratiche, consiglio il seguente:

  1. Usare sempre i binari formano aiutanti (form_for, ecc), se si scrive il proprio modulo, ti esponi a attacchi CSRF.

  2. Mentre si utilizza la funzione h() per sfuggire al testo così com'è scritto in una pagina, si finirà comunque con gli exploit XSS salvati nel database. L'utilizzo delle strisce di plug-in XSS_terminate come è stato salvato.

  3. Non dimenticare che la tua app è in esecuzione su una pila di altre applicazioni (Rails, Apache, MySQL, il tuo OS di scelta), ognuna delle quali ha i propri problemi di sicurezza.

2

The Rails disinfettare metodo è abbastanza buono, ma non garantisce ben formati, ed è abbastanza probabile che sia attaccato a causa della base di installazione. Una pratica migliore è usare html5lib (veramente il migliore, se non il più veloce o il più rubino) o Sanitize o Loofah