Si dovrebbe creare un nuovo hash basato solo su elementi di params
che ci si aspetta e desidera consentire di essere una parte del collegamento FTP
e utilizzare che per unire i parametri aggiuntivi.
Ciò che mi consente di aggiungere quello che voglio a quel collegamento FTP
modificando la querystring, aprendo la porta alle vulnerabilità della sicurezza. Creando un hash per l'uso al posto di params
nello params.merge(...
stai autorizzando la whitelist dei componenti di querystring previsti da utilizzare nel modello che stai rendendo.
Come esempio GET
, se vi aspettate un URL del tipo
/some/path?opt1=val1&opt2=val2
vostra azione di controllo si potrebbe fare
@cleaned_params = { opt1: params[:opt1], opt2: params[:opt2] }
@cleaned_params.merge! action: :ftp, archive: archive, recipient: :company
E poi passare @cleaned_params al link_to
= link_to "FTP", @cleaned_params
In questo modo se entro manualmente un URL del tipo
/some/path?opt1=val1&opt2=val2&maliciousopt=somexss
Il params[:maliciousopt]
non farà mai nella tua FTP
link_to
nel vostro punto di vista.
Lo stesso comportamento vale per POST
richieste, solo per essere dannoso mi permetto di aggiungere un paio di campi al modulo prima di inviarlo
<input type="hidden" name="maliciousopt" value="somexss" />
Grazie ... mi puoi dare un esempio? Non capisco davvero. – snowangel
Ho aggiornato la mia risposta per voi. – deefour
Completamente indebitato - grazie. – snowangel