2012-03-09 47 views
6

En una aplicación de rieles, los usuarios pueden crear eventos y publicar una url para vincular al sitio de evento externo.Sanitización de URL para evitar XSS en Rails

¿Cómo desinfecciono las URL para evitar enlaces XSS?

Gracias de antemano,

ejemplo de XSS, que no se puede prevenir mediante el método de higienización

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

Respuesta

1

Puede utilizar Rails rieles método sanitize por alguna restricción básica.

O puede usar la gema de rgrove sanitize para más opciones.

Espero que esto ayude.

+0

@url = "javascript: alert ('XSS')" xss link no funciona. Debería reflejar en mi pregunta que ya he probado el método de esterilización de los rieles. – rickypai

+1

La gema desinfectante de rgrove es realmente agradable si necesita más control del que le da la sanitización Rails incorporada. De cualquier manera, como señala la respuesta de Ben, debe desinfectar el html para todo el enlace, no solo la URL en sí. – antinome

5

Intenta desinfectar una vez que el href ya está en una etiqueta como:

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

Esto me da:

<a>xss link</a> 
1

sanitize funciona con cadenas HTML, no en las direcciones URL. lo que significa que no puede desinfectar una URL, pero puede desinfectar una parte de html que tiene un enlace con una URL maliciosa. por ejemplo

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

que limpiará su enlace de todos los atributos maliciosos conocidos

Cuestiones relacionadas