2016-08-25 7 views
5

Say mam następujące:Szyny 5 - Czy ktoś może wyjaśnić, w jaki sposób generowanie adresu URL z niesanalizowanych parametrów żądania jest niebezpieczne?

link_to "Excel", params.merge(format: 'xlsx')

Rails 5 mówi,

Próba wygenerowania URL z parametrów spoza odkażane życzenie! Osoba atakująca może wstrzyknąć szkodliwe dane do wygenerowanego adresu URL, na przykład zmienić hosta. Biała lista i odkaż parametry przekazane, aby były bezpieczne.

Chyba nie rozumiem, jak to jest niebezpieczne. Każdy może wpisać dowolną treść w przeglądarce i wykonać żądanie GET na moim serwerze. Co za różnica?

Wiem, że mogę obejść to dzięki permit!. Staram się zrozumieć, co osiąga higienizacja moich parametrów.

+0

https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF) – coreyward

+0

@coreyward Rails używa tokenów CSRF do POST, mówię o żądaniach GET.Wiadomość narzeka na URL, który generuję w mojej witrynie, więc czy przez CSRF proponujesz atakującemu adres URL mojej witryny, który po odwiedzeniu zawiera wygenerowany adres URL do zaatakowania innej witryny? –

Odpowiedz

7

Powinieneś przejrzeć dokumentację, zarówno z OWASP, jak i Rails itself.

Korzystając z permit, masz możliwość zablokowania ustawiania atrybutów, których nie chcesz przekazywać do Twojego pomocnika url.

Rozważmy poniższy link skierowane na swojej stronie, pochodzących z Twittera postu:

http://example.com/your/action?host=phishingscam.example&path=login 

Jeśli Twój kod wygląda tak, jesteś w tarapatach:

link_to 'View Something', params.merge(format: 'xlsx') 

Teraz link jest:

http://phishingscam.example/login.xlsx 

Strona atakująca, phishingscam.example, może ustawić typ zawartości na text/html i wyświetl stronę, która wygląda jak formularz logowania. Użytkownik, który przed chwilą był w Twojej witrynie i kliknął, aby wyświetlić coś na swojej stronie, uważa, że ​​został wylogowany i musi się ponownie zalogować. Teraz nasz atakujący ma poświadczenia użytkownika i może przekierować je z powrotem do odpowiedniego linku z użytkownikiem zupełnie nieświadomym tego, co się stało.

To prosty scenariusz. Rzeczy dość szybko mogą się zawalczyć. Powinieneś uzyskać numer: read the Rails security guide, aby dowiedzieć się więcej.

+0

Dzięki za wyjaśnienie, to było bardzo pomocne. Właściwie przeczytałem przewodnik bezpieczeństwa Railsów i chyba, że ​​jestem ślepy, nie wspomnę o tym (punkt przekierowania jest podobny). Inne niż tutaj na SO i kilka osób narzekających na wstępnie zaktualizowaną wersję Kaminari google również jest krótka. Jeśli znasz dziennik zmian w Railsach lub wpis na blogu, który wyjaśnia właściwą technikę dodawania do białej listy moich parametrów, bardzo chciałbym ją przeczytać. –

+0

@JPDuffy Widzę, że znalazłeś commit, w którym wiadomość została już dodana. ;) – coreyward

+0

Tak. :) Nie mogę pomóc, ale czuję, że powinien być lepszy sposób na zrobienie tego. https://github.com/rails/rails/commit/cacded5a0e0acc0582c2778b9dd8df684451ad53#commitcomment-18783847 –

1

Prosty sposób:

jeśli masz coś takiego:

link_to title, params.merge(:sort => column, :direction => direction, :page => nil), {:class => css_class} 

Musisz to w zezwolenia tych parametrów.

Można to wykorzystać:

link_to title, params.permit(:direction, :page).merge(:sort => column, :direction => direction, :page => nil), {:class => css_class} 

Voila !!

Powiązane problemy