2012-09-04 19 views
13

estoy usando Brakeman para identificar problemas de seguridad. Se podría poner los enlaces que utilizan params.merge como una vulnerabilidad de cross site scripting. ¿Cómo puedo desinfectar algo como lo siguiente?params.merge y cross site scripting

- @archives.each do |archive| 
    = link_to "FTP", params.merge(:action => :ftp, :archive => archive, :recipient => "company") 

Respuesta

15

Debe crear un nuevo hash a partir de sólo los elementos de params que espera y desea permitir ser parte del enlace FTP y utilizar que para fusionar sus parámetros adicionales.

Lo que tiene me permite agregar lo que quiera a ese FTP enlace modificando la cadena de consulta, abriendo la puerta a las vulnerabilidades de seguridad. Con la construcción de un hash para su uso en lugar de la params en el params.merge(... que estés lista blanca con eficacia los componentes de cadena de consulta previstos para su uso en la plantilla que está haciendo.


Como ejemplo GET, si espera una URL como

/some/path?opt1=val1&opt2=val2 

su acción de controlador que podría hacer

@cleaned_params = { opt1: params[:opt1], opt2: params[:opt2] } 
@cleaned_params.merge! action: :ftp, archive: archive, recipient: :company 

y luego pasar a la @cleaned_params link_to

= link_to "FTP", @cleaned_params 

De esta manera si entro manualmente una URL como

/some/path?opt1=val1&opt2=val2&maliciousopt=somexss 

El params[:maliciousopt] nunca llegará a su FTPlink_to en su opinión.

El mismo comportamiento se aplica a POST solicitudes, sólo para ser malicioso podría añadir un par de campos al formulario antes de enviarlo

<input type="hidden" name="maliciousopt" value="somexss" /> 
+0

Gracias ... ¿me puede dar un ejemplo? Realmente no lo entiendo – snowangel

+0

Actualicé mi respuesta por usted. – deefour

+0

Totalmente en deuda, gracias. – snowangel

Cuestiones relacionadas