2012-07-03 13 views
5

Acabo de empezar a utilizar la herramienta brakeman para explorar mi aplicación de raíles por vulnerabilidades de seguridad.Cómo asegurar link_to @variable cross site scripting vulnerabilities

He logrado que todo esté ordenado, excepto por varias advertencias de secuencias de comandos de sitios cruzados.

Todos ellos comparten en común lo siguiente:

  • Están todas las etiquetas link_to
  • Todos ellos tienen las variables de instancia de la clase, alt o título atributos
  • Las variables de instancia toda representar una consulta de registro activo que incluye los modelos asociados
  • Las variables de instancia son todas "commentables". Esto describe una asociación polimórfica para comentarios generados por el usuario, similar en enfoque a la versión revisada de this Railscast.

por ejemplo

<%= link_to "Click" , :class=> @model.association.attribute, :alt=> @model.association.attribute, :title=> @model.association.attribute, @model.association %> 

donde

@model = @commentable = Model.includes(:association1, association2: {:nested-association1, :nested-association2}).find(params[:id]) 

Es esto algo que tengo que estar preocupado/tomar medidas para? Pensé que Rails 3.2 escapa a estos por defecto.

Me gustaría recibir consejos para ayudarme a comprender mejor este problema e identificar los pasos que debo seguir, si corresponde.

Respuesta

4

No he podido reproducir ninguna advertencia del código que proporcionó. ¿Qué versión de Brakeman estás usando? ¿Cuál fue la advertencia real (redactada según sea necesario)?

I sospechoso está recibiendo advertencias porque la entrada del usuario se está detectando en el valor href del enlace. Consulte this pull request para obtener más información acerca de por qué esto puede ser peligroso.

Lamentablemente, sin más información, no puedo decir si esto es un falso positivo que debe corregirse o una advertencia legítima.

Edición:

bien, ahora estoy viendo la advertencia cuando se prueba con @model = @commentable = ... Este es un problema con la forma en Brakeman está manejando la asignación.

Si está enlazando a una instancia de un modelo, no debe haber ninguna advertencia. Si está enlazando con un atributo de modelo, esto se cuenta como una entrada de usuario.

Sí, Rails escapará de HTML, pero no se ocupa de los enlaces que comienzan con javascript: o data: que can be used for XSS.

+0

gracias por su respuesta Justin. Después de haber analizado nuevamente el error, también he notado que todas son sentencias 'includes' complejas (es decir, varios modelos, algunos de los cuales están anidados). Además (y quizás esta es la causa) todos son "commentables". Actualizaré mi pregunta con más detalle. –

+0

quizás refactorizando mi '@model = @commentable = ARquery' a dos líneas podría resolver esto? Pero todavía no estoy seguro de entender por qué esto es un problema. ¿Los Rails no escaparán por defecto?Aprecie cualquier consejo para ayudarme a mejorar mi comprensión. –

+0

Respuesta actualizada a la luz de esta nueva información. Parece que dividir en dos líneas resuelve el problema, que es un error en Brakeman. – Justin

Cuestiones relacionadas