2009-10-18 13 views
8

Wiem, że mogę używać metody ActionView helper strip_tags w moich widokach, aby odseparować wynik, ale jaki jest najlepszy sposób na odkażenie danych wprowadzanych przez użytkownika przed utrzymaniem go w mojej bazie danych? Czy powinienem znaleźć sposób włączenia pomocnika widoku w moim kontrolerze i ponownego użycia metody strip_tags? Myślałem, że szyny mają coś dostępnego na całym świecie, żeby zrobić coś takiego.Sanitize input Wejście XSS i HTML w szynach

Odpowiedz

4

Co z wtyczką xss_terminate?

+3

Dwa lata później i dwie notatki na dole bez komentarzy - komentarze pomogłyby przynajmniej w lepszym zrozumieniu dla innych użytkowników. Uwaga: w momencie odpowiedzi używaliśmy Rails 2 i rzeczy nie były tak wspaniałe, jak teraz! –

-1

Dlaczego należy odkażać dane wejściowe użytkownika?

Zazwyczaj wszystko, czego potrzeba, to rygorystyczne, kontekstowe kodowanie/ucieczka danych wprowadzanych przez użytkownika podczas jego drukowania lub osadzania w większym bloku danych wyjściowych.

+0

Nie ma sensu pozostawiać złośliwego kodu po prostu siedząc w bazie danych. Wiele wektorów ataków na aplikacje internetowe jest już powszechnym miejscem, a to wydaje się łatwe do naprawienia, IMO. Obrona w głębi, wiesz? – phreakre

+0

Rails 3 ma prawidłowe podejście. To automatycznie html-ucieka od wszystkiego (w tym danych wprowadzanych przez użytkownika) wyprowadzanych do HTML, z wyjątkiem tych konkretnych elementów, które programista wskazuje, że są już bezpieczne dla html. Railsy 3 zajmują się obroną i robią to we właściwy i rygorystyczny sposób, a dane są usuwane we właściwym miejscu i we właściwym czasie. – yfeldblum

-1

Dlaczego chcesz zdezynfekować wejściowych użytkownika? To nawet nie ma sensu! Zawsze chcesz odkażać (uciekać) wyniki, a nie nakłady, ponieważ znaczenie sanityzacji zależy od kontekstu, w którym używasz treści. Nie ma czegoś takiego jak ciąg, który jest bezpieczny w każdym kontekście. Nie chcesz, aby w Twojej bazie danych było mnóstwo zmanipulowanych łańcuchów, które są "bezpieczne" w jakimkolwiek scenariuszu, którego aplikacja używa dzisiaj, ponieważ jutro możesz chcieć zrobić z nimi coś innego. Jeśli twoja warstwa prezentacji robi właściwą rzecz (ucieczka zawartości w oparciu o kontekst), wszystko jest w porządku, bez względu na to, ile cytatów, odwrotnych ukośników lub instrukcji DROP TABLE jest w nich.

+0

W niektórych przypadkach sensowne jest "odkażenie" danych wprowadzanych przez użytkownika przed zapisaniem go w bazie danych. Na przykład, jeśli użytkownik wpisze swoje nazwisko jako "

Smith

", to nie ma sensu przechowywać tagu HTML w bazie danych. W takim przypadku dobrze jest usunąć znacznik html przed zapisaniem nazwiska w bazie danych. –

+0

Pierwotne pytanie związane z zastrzykiem (XSS i HTML), w którym to przypadku utrzymuję, że dezynfekcja jest * zawsze * martwa. Ale nawet jeśli w jakiś sposób dostaniecie śmieci w sznurku, jakie są wasze szanse na to, aby sanityzacja znalazła śmieci? Algorytmowi trudno jest określić, która część jest i nie jest nazwą. Na przykład, kiedy jest to ampersand część encji HTML i kiedy jest częścią nazwy takiej jak "Smith & Wesson"? Niedługo skończy się to: http://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/ – Enno