Należy utworzyć nowy skrót w oparciu o wyłącznie elementów params
którego oczekują i pragną, aby umożliwić być częścią łącza FTP
i używać że do scalania dodatkowe parametry.
To, co mam, pozwala mi dodać to, co chcę, do tego linku FTP
, modyfikując querystring, otwierając drzwi do luk w zabezpieczeniach. Budując hasz do użycia zamiast params
w wersji params.merge(...
, możesz skutecznie dodawać do białej listy oczekiwane komponenty, które będą używane w renderowanym szablonie.
Jako GET
przykład, jeśli oczekujesz URL podobnego
/some/path?opt1=val1&opt2=val2
swojej akcji kontrolera można zrobić
@cleaned_params = { opt1: params[:opt1], opt2: params[:opt2] }
@cleaned_params.merge! action: :ftp, archive: archive, recipient: :company
a następnie przekazać @cleaned_params do link_to
= link_to "FTP", @cleaned_params
W ten sposób, jeśli ręcznie wprowadzić adres URL jak
/some/path?opt1=val1&opt2=val2&maliciousopt=somexss
params[:maliciousopt]
nigdy nie będzie go do FTP
link_to
w widoku.
To samo zachowanie dotyczy POST
wniosków, tylko być złośliwy dodam kilka pól do formularza przed złożeniem go
<input type="hidden" name="maliciousopt" value="somexss" />
Dzięki ... możesz dać mi przykład? Naprawdę tego nie rozumiem. – snowangel
Zaktualizowałem dla ciebie odpowiedź. – deefour
Całkowicie zadłużony - dziękuję. – snowangel