Czy podczas sprawdzania poprawności danych wejściowych w witrynie internetowej są jakieś obawy dotyczące bezpieczeństwa związane z ujawnieniem użytkownikowi dokładnie, jakie znaki są prawidłowe lub nieprawidłowe w danym polu?
CWE-200: Ujawnianie informacji mówi, że należy starać się nie ujawniać informacji, „które mogą być przydatne podczas ataku, ale normalnie nie są dostępne dla atakującego”. Konkretnym przykładem może być zapobieganie ujawnianiu przez system śladów stosu (rozwiązane w CWE-209: ujawnianie informacji poprzez komunikat o błędzie).
Czy należy upewnić się, że komunikaty o błędach są niejasne, np. „Wprowadzony tekst zawiera nieprawidłowe znaki”?
Czy uwzględnienie wyrażeń regularnych używanych do sprawdzania poprawności danych wejściowych w kodzie po stronie klienta, takich jak JavaScript, które byłyby widoczne dla atakujących, stanowi lukę w zabezpieczeniach? Alternatywa, sprawdzanie poprawności danych wejściowych po stronie serwera, zmniejszyłaby nieco użyteczność, ponieważ wymagałaby większej komunikacji wewnętrznej (np. Mogłaby spowodować, że witryna będzie odpowiadać i wyświetlać błędy wolniej).
A może jest to forma „zabezpieczenia przez zaciemnienie”, ponieważ użytkownik / atakujący może wywnioskować, jakie znaki są prawidłowe, wielokrotnie przesyłając różne znaki, aby sprawdzić, czy powodują błędy?
Czy warto skorzystać z wrażeń użytkownika, aby potencjalnie spowolnić atak?
O ile wiem, powinienem zwrócić uwagę na Arkusz weryfikacji danych wejściowych OWASP i Przewodnik po programach sprawdzania poprawności danych nie zawierają wskazówek na ten temat.
Edytuj 17.01.2020:
Było kilka pytań (w tym odpowiedzi, na które podjąłem wysiłek pisania komentarzy, które od tego czasu usunięte), aby dowiedzieć się, dlaczego należy wykonywać walidację danych wejściowych.
Po pierwsze, dziękuję @Loek za komentarz wskazujący na standard weryfikacji bezpieczeństwa aplikacji OWASP, który zawiera wskazówki dotyczące haseł na stronach 21 i 22: „Sprawdź, czy nie ma reguł tworzenia haseł ograniczających rodzaj dozwolonych znaków. Nie powinno być wymagań dotyczących wielkich lub małych liter, cyfr ani znaków specjalnych. ”.
Myślę, że wszyscy możemy się zgodzić, że ograniczanie znaków w haśle jest ogólnie złym pomysłem (patrz odpowiedź @ Merchako). Jak wskazuje @emory, prawdopodobnie nie może to być trudna i szybka reguła (np. Widziałem wiele aplikacji mobilnych, które używają łatwiejszego w użyciu dodatkowego „kodu PIN” do zabezpieczenia aplikacji, nawet jeśli ktoś inny ma do nich dostęp aby zalogować się do urządzenia). Kiedy zadawałem to pytanie, nie miałem na myśli haseł, ale w tym kierunku poszły komentarze i odpowiedzi. Więc na potrzeby tego pytania rozważmy, że dotyczy ono pól innych niż hasła.
Walidacja danych wejściowych jest częścią „głębokiej obrony” dla witryny internetowe, usługi internetowe i aplikacje, aby zapobiegać atakom polegającym na wstrzykiwaniu. Ataki typu „wstrzykiwanie”, jak stwierdza OWASP, „mogą skutkować utratą danych, uszkodzeniem lub ujawnieniem danych nieupoważnionym stronom, utratą odpowiedzialności lub odmową dostępu. Iniekcja może czasami prowadzić do całkowitego przejęcia hosta. Wpływ na biznes zależy od potrzeb aplikacji i danych ”.
Zobacz lukę nr 1 w OWASP, A1-Injection i CWE-20: Niewłaściwa weryfikacja danych wejściowych, aby uzyskać bardziej szczegółowe informacje. Zauważ, że obaj twierdzą, że sprawdzanie poprawności danych wejściowych nie jest pełną obroną, ale raczej jedną warstwą tej „głębokiej obrony” dla oprogramowania.