2012-09-04 13 views
13

Sto usando Brakeman per identificare problemi di sicurezza. Segnala tutti i collegamenti che utilizzano params.merge come vulnerabilità di cross site scripting. Come posso disinfettare qualcosa come il seguente?params.merge e cross site scripting

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

risposta

15

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 FTPlink_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" /> 
+0

Grazie ... mi puoi dare un esempio? Non capisco davvero. – snowangel

+0

Ho aggiornato la mia risposta per voi. – deefour

+0

Completamente indebitato - grazie. – snowangel

Problemi correlati