2012-03-09 10 views
6

In un'applicazione rails, gli utenti possono creare eventi e pubblicare un URL per collegarsi al sito dell'evento esterno.Sanitizzazione dell'URL per impedire XSS in Rails

Come si disinfettano gli URL per impedire i collegamenti XSS?

Grazie in anticipo,

esempio di XSS, che non è prevenibile da metodo sanitize

@url = "javascript:alert('XSS')" 
<a href="<%=sanitize @url%>">test link</a> 

risposta

1

È possibile utilizzare Rails' rotaie metodo sanitize per un certo limite di base.

Oppure è possibile utilizzare la gemma sanitize di rgrove per ulteriori opzioni.

Spero che questo aiuti.

+0

@url = "javascript: alert ('XSS')" xss link non funziona. dovrei riflettere sulla mia domanda che ho già testato il metodo igienizzante delle rotaie. – rickypai

+1

La gemma sanitize di rgrove è davvero bella se hai bisogno di un controllo maggiore rispetto a quello fornito da Rails sanitize. Ad ogni modo, come sottolinea la risposta di Ben, è necessario disinfettare l'html per l'intero link, non solo l'URL stesso. – antinome

5

Prova sanificazione una volta che il href è già in un tag come:

url = "javascript:alert('XSS')" 
sanitize link_to('xss link', url) 

Questo mi dà:

<a>xss link</a> 
1

sanitize opere con le stringhe html, non URL. nel senso, non puoi disinfettare un URL in sé, ma puoi disinfettare un pezzo di HTML che ha un link con un URL dannoso. per esempio

<%= sanitize "<a href='#{@url}'>Things</a>" %> 

che pulirà il vostro link di tutti gli attributi dannosi noti

Problemi correlati