/ / Praktyczna walidacja użytkownika (czułość i specyficzność)? - regex, walidacja, logika biznesowa

Praktyczna walidacja użytkownika (czułość i specyficzność)? - regex, walidacja, logika biznesowa

Kiedy pierwszy raz uczyłem się, jak używać zwykłegowyrażenia nauczyliśmy się, jak parsować rzeczy takie jak numery telefonów (oczywiście zawsze 5 cyfr, opcjonalne spacje i kolejne 6 cyfr), adresy e-mail (oczywiście zawsze alfanumeryczne, potem pojedyncze "@", następnie alfanumeryczne, a następnie "." i trzy litery), które zawsze powinniśmy zrobić, aby sprawdzić dane wprowadzone przez użytkownika.

Oczywiście, jak się rozwinąłem, nauczyłem się jakGłupie może być podstawowe podejście, ale im więcej patrzę, tym bardziej kwestionuję koncepcję, a najbardziej otwarta, staranna poprawna walidacja czegoś takiego jak adres e-mail poprzez wyrazy regularne kończy się setkami, jeśli nie tysiącami znaków, aby obaj zaakceptować wszystkie sprawy sądowe i prawidłowo odrzucają tylko te nielegalne. Co gorsza, cały ten wysiłek nie ma absolutnie żadnego znaczenia dla rzeczywistej ważności, użytkownik mógł przypadkowo dodać "a", lub może w ogóle nie używać tego adresu e-mail, a nawet używa adresu kogoś innego, lub może nawet użyć symbol "+" oznaczony niewłaściwie.

A jednocześnie na pozór każde miejsce, które odwiedzamprzez cały czas wykonuje tego rodzaju techniczne kontrole, uniemożliwiając umieszczanie bardziej niejasnych znaków w adresie e-mail lub nazwisku, lub sprzeciwiając się idei, że ktoś miałby mniej lub więcej niż jeden tytuł, a następnie pojedyncze imię i jedno nazwisko, wszystkie wykonane wyłącznie ze znaków łacińskich, ale bez żadnej formy sprawdzenia, czy to moje prawdziwe imię.

Czy jest na tym korzyść? Po wykonaniu ataku wtryskowego (który powinien odbywać się metodami innymi niż sterylizacja danych wejściowych), czy istnieje jeszcze inny punkt tych kontroli?

Z drugiej strony, czy istnieje rzeczywiście pewny sposób na ogarnięcie, aby rzeczywiście zweryfikować dane użytkownika, inne niż "wykorzystywać" je w jakikolwiek sens, który ma sens w kontekście i czy się przewróci?

Odpowiedzi:

0 dla odpowiedzi № 1

czy istnieje jeszcze inny punkt tych kontroli?

Na pewno. Świadomość, że twoje dane są ważne, jest bardzo ważna. Na przykład w przypadku adresów e-mail wysłanie wiadomości e-mail na adres, którego nie zweryfikowano, doprowadzi przynajmniej do odrzucenia. Wystarczająco dużo odrzuceń, a serwer pocztowy może zablokować Cię do rozsyłania spamu. niepotrzebne koszty, jeśli aplikacja próbuje wysłać do nich SMS-a. Lista jest długa.

Z drugiej strony, czy istnieje rzeczywiście pewny sposób na ogarnięcie, aby rzeczywiście zweryfikować dane użytkownika, inne niż "wykorzystywać" je w jakikolwiek sens, który ma sens w kontekście i czy się przewróci?

Tak, ale regex to na ogół zły sposób sprawdzania poprawnościdane. Jeśli numer telefonu ma wynosić "5 cyfr, a następnie 6 cyfr", oznacza to, że czek nie powiedzie się, jeśli wpiszę "5 cyfr, dwie spacje, potem 6 cyfr" lub "5 cyfr kreska, a następnie 6 cyfr" lub "11 cyfr". cyfry ". Używaj zdrowego rozsądku i oczekuj dowolnego zwariowanego formatu, jaki zapewnia użytkownik. Dowiedz się, jakie jest bezwzględne minimalne wymaganie. Na przykład, jeśli potrzebujesz 11 cyfr, najpierw usuń wszystko, co nie jest cyfrą, a potem formatowanie nie ma znaczenia.

Przeczytaj także dokumenty RFC. Nie mogę zliczyć, ile razy mój adres e-mail został odrzucony, ponieważ ma on znak plus. Liczba tych, którzy byli dużymi technologicznymi firmami, z programistami, którzy powinni wiedzieć lepiej, była raczej rozczarowująca.


17 dla odpowiedzi nr 2

Nadmierna walidacja rzeczy jest rzeczywiście jednym z zakazów internetu. Zwłaszcza jeśli osoba pisząca kod weryfikacyjny nie ma faktycznej wiedzy na temat domeny problemu. Nie, prawdopodobnie tak nie faktycznie wie, jaka jest prawidłowa składnia adresów e-mail. Lub adresy w świecie rzeczywistym, zwłaszcza w skali międzynarodowej. Lub numery telefonów. Lub imiona ludzi.

Spojrzenie na kilka zlokalizowanych przykładów (mój adres e-mail) i ekstrapolacja na reguły wszystko możliwe wartości w domenie (wszystkie wiadomości e-mailadresy) jest szaleństwem. Jeśli nie masz doskonałej znajomości domeny, nie powinieneś wymyślać zasad dotyczących domeny. W przypadku adresów e-mail prowadzi to tylko do bardzo wąskiego podzbioru możliwych adresów e-mail, które można wykorzystać w codziennym życiu. Ghee, dzięki, chłopaki.

Jeśli chodzi o imiona ludzi, to, co im się mówi, jest ich imieniem i nazwiskiem, tak jak je nazywacie. Nie można go zweryfikować automatycznie; będą musieli przesłać kopię aktu urodzenia faktycznego urzędnika uprawomocnienie. I czy jest to tak naprawdę to, co "chciałbyś wiedzieć", czy tylko potrzebujesz "uchwytu", aby powitać i zidentyfikować ich na stronie forum?

Facebook robi (zrobił?) ścisłe sprawdzanie poprawności nazw w celu zmuszenia ludzi do zarejestrowania swoich prawdziwych nazwisk. Cóż, wiele osób, które znam na Facebooku, nadal używa jakiejś wymyślonej bezsensownej nazwy. Filtr oczywiście nie działa. Powiedziawszy to, być może działa wystarczająco dobrze na Facebook, aby to większość ludzie używają swojej rzeczywistej nazwy, ponieważ nie mogliby się dowiedzieć, który konkretny wzorzec przejdzie walidację. W tym sensie taki filtr może służyć trochę cel, powód.

Ostatecznie to Ty decydujesz o powodach walidacji i określone limity chcesz wymusić. Problem polega na tym, że ludzie często nie myślą o szerszym obrazie przed napisaniem kodu walidacyjnego i mają go bez powodu dla ich konkretnych limitów. Nie wpadnij w tę pułapkę.