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 FTP
link_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" />
Gracias ... ¿me puede dar un ejemplo? Realmente no lo entiendo – snowangel
Actualicé mi respuesta por usted. – deefour
Totalmente en deuda, gracias. – snowangel