2009-10-18 8 views
8

So che posso utilizzare il metodo ActionView helper strip_tags nelle mie visualizzazioni per disinfettare l'output, ma qual è il modo migliore per sanitare l'input dell'utente prima di mantenerlo nel mio db? Dovrei trovare un modo per includere l'helper della vista nel mio controller e riutilizzare il metodo strip_tags? Pensavo che le rotaie avrebbero avuto qualcosa di disponibile a livello globale per fare qualcosa del genere.Sanitize input XSS e HTML input in rail

risposta

4

E il plug-in xss_terminate?

+3

2 anni dopo e due downvotes senza commenti: i commenti aiuterebbero almeno le cose in modo più chiaro per gli altri utenti. Nota: al momento della risposta stavamo usando Rails 2 e le cose non erano grandi come adesso! –

-1

Perché è necessario disinfettare l'input dell'utente?

In genere, tutto ciò che è necessario è una codifica/escape rigorosa e sensibile al contesto dell'input dell'utente ogni volta che viene stampata o incorporata in un blocco di output più ampio.

+0

Non ha senso lasciare codice dannoso semplicemente seduto nel database. I vettori di attacco multipli nelle applicazioni Web sono già un luogo comune e questo sembra solo una cosa facile da risolvere, IMO. Difesa in profondità, sai? – phreakre

+0

Rails 3 ha l'approccio corretto. Esegue automaticamente l'html-escape di qualsiasi cosa (inclusi i dati immessi dall'utente) in uscita nell'html, ad eccezione di quelli specifici che il programmatore indica già html-safe. Rails 3 fa una difesa approfondita, e lo fa nel modo corretto e rigoroso, con i dati che scappano nel posto giusto e al momento giusto. – yfeldblum

-1

Perché vuoi per disinfettare input dell'utente? Non ha nemmeno senso! Si desidera sempre disinfettare (scappare) gli output, non gli input, perché il significato dell'igienizzazione dipende dal contesto in cui si sta utilizzando il contenuto. Non esiste una stringa che sia sicura in qualsiasi contesto. Non vuoi che un mucchio di stringhe manomesse nel tuo database siano "sicure" in qualunque scenario la tua applicazione le stia utilizzando oggi, perché domani potresti voler fare qualcosa di diverso con loro. Se il tuo livello di presentazione sta facendo la cosa giusta (sfuggire il contenuto in base al contesto), allora stai bene, indipendentemente da quante virgolette, barre rovesciate o istruzioni DROP TABLE ci siano.

+0

In alcuni casi ha senso "sanitizzare" l'input dell'utente prima di memorizzarlo nel database. Ad esempio, se un utente immette il suo cognome come "

Smith

", non ha senso memorizzare il tag html nel database. In questo caso, è preferibile rimuovere il tag html prima di salvare il cognome nel database. –

+0

La domanda originale relativa all'iniezione (XSS e HTML), nel qual caso ritengo che la sanificazione sia * sempre * usurata. Ma anche se in qualche modo ti sei immondizia nella stringa, quali sono le tue probabilità che la sanitizzazione trovi la spazzatura? È difficile per un algoritmo capire quale parte sia e non sia un nome. Ad esempio, quando è quella parte commerciale e di un'entità HTML e quando fa parte di un nome come "Smith & Wesson"? Molto presto, si finisce con questo: http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/ – Enno