2013-07-04 21 views
10

Wprowadziłem sprawdzanie poprawności danych wejściowych dla wszystkich danych wejściowych za pomocą php (jak również js na interfejsie użytkownika). Używam odlewania w typie, gdzie mogę, sprawdzając poprawność takich rzeczy jak e-maile w wyrażeniu regularnym, upewniając się, że wartości rozwijane są tylko tymi, których się spodziewam, a także w wielu przypadkach, w których oczekuję tylko ciągu znaków. Mam regex, który działa, co pozwala tylko litery, cyfry i spacje. Wszystko, co nie spełnia tych reguł, powoduje, że sprawdzanie poprawności nie działa, a zapytania sql nie są uruchamiane.sanityzacja danych wejściowych sprawdzanie poprawności VS

Powiedziawszy to, jeśli mój formularz przejdzie sprawdzanie poprawności, zakładam, że można go bezpiecznie wprowadzić do bazy danych (co robię przez pdo), a następnie uciekam na wyjściu.

Więc z tym powiedziałem, dlaczego potrzebuję sanityzacji wejściowej?

+1

Powiedziałbym, że jesteś w następstwie przyjętej metody. Dezynfekcja i walidacja (łącznie) nie zawsze są konieczne. Mimo, że jestem fanem obrony w głębi, więc prawdopodobnie wykonam obie. Ale "odrzucanie znanych złych" i "przyjmowanie znanego dobra" jest również uważane za dopuszczalne. https://www.owasp.org/index.php/Data_Validation – cmt

Odpowiedz

7

Jeśli masz bardzo ścisłą weryfikację po stronie serwera, nie musisz sanatyzować. Na przykład. sprawdzanie ciągu znaków na/^ [a-z0-9] {5,25} $/nie będzie wymagało żadnego odkażania (usunięcie znaków niealfanumerycznych nie będzie miało sensu, ponieważ i tak nie powinny one być przekazywane).

Tylko upewnij się, że możesz sprawdzić wszystkie dane, a jeśli to niemożliwe (np. Z html, to jest trochę trudne), możesz użyć strategii ucieczki lub rzeczy takich jak html purifier.

Na dobry przegląd na uciekających strategii zapobiegania XSS: zobaczyć https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet

Na pomysł różnymi zagrożeniami: https://www.owasp.org/index.php/PHP_Security_Cheat_Sheet

+0

Tak, jestem dobrze zorientowany w treści na owasp. Dzięki –

3

Potrzebujesz obu. Sprawdzanie poprawności danych wejściowych jest łatwe do pokonania po stronie klienta, ale jest przydatne dla uprawnionych użytkowników, którzy nie próbują Cię hakować. Oczyść dane (wszystkie dane, niezależnie od tego, czy są to dane wejściowe lub coś prosto z bazy danych, które Twoim zdaniem powinieneś mieć zaufanie) przed umieszczeniem w bazie danych.

Nawet jeśli w 100% ufasz swojej walidacji i robisz to po stronie serwera (gdzie teoretycznie ludzie nie powinni być w stanie zadzierać z danymi), to nadal warto użyć jakiejś formy odkażania, ponieważ jest to dobre zwyczaj wejść.

+0

Nawet jeśli jesteś bardzo pewny siebie w kwestii walidacji, po co podejmować ryzyko? –

+0

To prawda, chciałbym być tak bezpieczny, jak to możliwe, więc to pytanie zostało zadane, aby wyjaśnić moje zamieszanie. Jedyną różnicą, którą widzę pomiędzy walidacją a sanityzacją jest to, że walidacja zwraca wartość true lub false podczas testowania danych wejściowych, podczas gdy dezynfekcja faktycznie zastępuje niechciane postacie. Mam zamiar zakończyć walidację z regex, a następnie oczyszczać je za pomocą tego samego wyrażenia regularnego, ale zamiast tego użyć preg_replace.Just wydaje się nieco zacofany. –

+2

Jednym z kontekstów, w których sanityzacja może przyjść do własnej jest tam, gdzie nie mogę zwalidować agresywnie, tj. Pole tekstowe, w którym użytkownik może wprowadzić znaki nie alfanumeryczne ... wtedy widzę zastosowanie w sanityzacji –

Powiązane problemy