| Termin | Definicja |
|---|---|
| unikanie błędów w danych dynamicznych | Unikanie błędów w danych dynamicznych wymaga walidacji wartości przed ich wstawieniem do treści. Unikanie błędów w danych dynamicznych – czym jest problemUnikanie błędów w danych dynamicznych oznacza takie projektowanie aplikacji, stron internetowych i paneli administracyjnych, aby wartości pobierane w czasie działania programu były sprawdzane, porządkowane i bezpiecznie wykorzystywane. Dane dynamiczne mogą pochodzić z formularza, adresu URL, pliku, bazy danych, pamięci przeglądarki, zewnętrznego interfejsu programistycznego albo działania innego modułu. Ich treść nie jest znana z góry, dlatego nie powinno się traktować jej tak samo jak stałego tekstu wpisanego bezpośrednio w kodzie. W praktyce chodzi nie tylko o sprawdzenie, czy pole nie jest puste. Konieczne może być ustalenie typu wartości, dozwolonego zakresu, długości, formatu, kodowania znaków oraz zależności od innych pól. Jeżeli oczekiwany jest numer identyfikacyjny, powinno się dopuścić wyłącznie znaki odpowiadające temu formatowi. Jeżeli oczekiwany jest adres poczty elektronicznej, należy sprawdzić jego podstawową strukturę, a następnie zdecydować, czy dalsza obsługa nie wymaga dodatkowego potwierdzenia. Jeżeli dane mają zostać wyświetlone jako tekst, powinny być traktowane jako tekst, a nie jako fragment kodu. Ważne jest rozróżnienie pomiędzy walidacją a oczyszczaniem danych. Walidacja odpowiada na pytanie, czy wartość spełnia założone reguły. Oczyszczanie może usuwać zbędne elementy, normalizować zapis lub zmieniać sposób reprezentacji. Nie powinno się jednak zastępować walidacji automatycznym usuwaniem znaków, ponieważ taka operacja może ukryć błąd i zmienić znaczenie informacji. Bezpieczniejszy model zakłada odrzucenie niepoprawnej wartości albo skierowanie jej do kontrolowanego procesu obsługi. Kontekst techniczny unikania błędów w danych dynamicznychDane dynamiczne przechodzą zwykle przez kilka warstw. Najpierw są odbierane przez interfejs użytkownika, później trafiają do logiki aplikacji, następnie mogą zostać zapisane w bazie lub przekazane do kolejnego systemu. Na każdym etapie może pojawić się inny rodzaj błędu. Przeglądarka może ograniczyć wpisywanie wartości, ale nie stanowi wystarczającego zabezpieczenia, ponieważ żądanie można wysłać poza przygotowanym formularzem. Z tego powodu reguły trzeba powtórzyć po stronie serwera lub w głównej warstwie przetwarzania. Istotne jest także dopasowanie ochrony do miejsca, w którym dane będą użyte. Wartość przeznaczona do zapytania do bazy wymaga bezpiecznego mechanizmu parametrów, a nie ręcznego sklejania tekstu. Informacja wstawiana do kodu HTML powinna zostać zakodowana zgodnie z kontekstem wyświetlania. Dane używane w adresie internetowym, arkuszu stylów, skrypcie lub nagłówku wymagają odrębnych zasad. Samo usunięcie kilku znaków nie daje pewności, że wartość jest bezpieczna w każdym miejscu. Dobrym porównaniem jest kontrola bagażu przed wejściem do różnych środków transportu. To, co jest dopuszczalne w jednym miejscu, nie musi być właściwe w innym. Podobnie liczba, data, identyfikator i opis słowny mają odmienne reguły. Wartość poprawna składniowo może być nadal nieprawidłowa znaczeniowo. Data może mieć właściwy układ znaków, ale wskazywać dzień spoza dozwolonego okresu. Liczba może mieścić się w formacie, lecz przekraczać zakres przewidziany dla danego pola. Dlatego kontrola powinna obejmować zarówno kształt danych, jak i ich sens. W systemach korzystających z wielu źródeł należy porównywać także wersję, aktualność i pochodzenie informacji. Opóźniony zapis może nadpisać nowszą wartość, a odpowiedź z zewnętrznej usługi może mieć zmienioną strukturę. Przydatne staje się jawne określenie wymaganych pól, obsługa wartości pustych oraz bezpieczne zachowanie w razie braku odpowiedzi. Program nie powinien zakładać, że każda odpowiedź będzie kompletna tylko dlatego, że wcześniejsze odpowiedzi miały oczekiwany układ. Typowe problemy przy unikaniu błędów w danych dynamicznychJednym z częstych problemów jest zaufanie do danych wyłącznie dlatego, że pochodzą z własnego formularza. Formularz może zostać pominięty, zmodyfikowany albo wywołany z nietypowymi parametrami. Innym problemem jest sprawdzanie tylko obecności pola. Wartość może istnieć, lecz zawierać same spacje, nieprawidłowe znaki, zbyt długi tekst albo zapis, którego dalsza część aplikacji nie potrafi obsłużyć. Błędy powstają również przy niejednoznacznych konwersjach. Zapis liczby z przecinkiem lub kropką może być różnie interpretowany, podobnie jak data zapisana w odmiennych układach. Warto ustalić jeden wewnętrzny sposób przechowywania oraz jasno określić reguły prezentacji. Przy danych tekstowych należy pamiętać o kodowaniu znaków, znakach końca linii, niewidocznych odstępach i różnicach między wielkością liter. Niebezpieczne bywa również bezpośrednie wstawianie danych do komunikatów, szablonów lub elementów interfejsu. Jeżeli treść dynamiczna zostanie potraktowana jak instrukcja, może zmienić działanie programu albo doprowadzić do ujawnienia informacji. Z tego powodu należy korzystać z mechanizmów przeznaczonych do bezpiecznego wyświetlania, parametrów zapytań oraz silnego rozdzielenia danych od kodu. Osobną klasę problemów stanowią błędy logiczne. Pole może przejść walidację, lecz nadal nie pasować do stanu systemu. Przykładem jest próba użycia identyfikatora, który ma poprawny format, ale nie istnieje, albo odwołanie do rekordu, do którego dana osoba nie powinna mieć dostępu. Sprawdzenie poprawności wartości nie zastępuje kontroli uprawnień, spójności i kolejności operacji. Warto unikać komunikatów zdradzających nadmiar szczegółów technicznych. Użytkownik powinien otrzymać informację, co należy poprawić, natomiast szczegółowy zapis diagnostyczny powinien trafić do kontrolowanego rejestru. Rejestr powinien zawierać kontekst potrzebny do analizy, ale nie powinien utrwalać haseł, pełnych tokenów, kluczy dostępowych ani innych poufnych danych. Taka równowaga ułatwia wykrywanie przyczyn bez tworzenia kolejnego źródła ryzyka. Praktyczne wskazówki dotyczące unikania błędów w danych dynamicznychNajlepiej rozpocząć od opisania kontraktu danych. Należy wskazać, które pola są wymagane, jaki mają typ, jaki zakres wartości obowiązuje i co ma się wydarzyć przy braku informacji. Dobrze zdefiniowany kontrakt ogranicza dowolność interpretacji między formularzem, serwerem, bazą i modułem prezentacji. Przy wymianie danych pomiędzy systemami pomocne jest jawne określenie wersji oraz zachowania przy pojawieniu się dodatkowych lub brakujących pól. Walidację warto wykonywać możliwie blisko miejsca, w którym dane są przyjmowane, a następnie powtarzać ją przed operacjami o istotnych skutkach. Pierwsza kontrola pozwala szybko przekazać informację zwrotną, druga chroni logikę aplikacji przed żądaniami wysłanymi z pominięciem interfejsu. Reguły powinny być testowalne i czytelne, tak aby można było sprawdzić zarówno przypadki prawidłowe, jak i graniczne. Przydatne jest rozdzielenie kilku etapów: odczytu, normalizacji, walidacji, autoryzacji, przetwarzania i prezentacji. Takie rozdzielenie ułatwia ustalenie, gdzie powstał błąd. Nie należy mieszać automatycznej zmiany treści z decyzją, czy wartość jest dopuszczalna. W razie odrzucenia danych powinno się zachować bezpieczny komunikat i możliwość ponowienia operacji bez utraty pozostałych, prawidłowych informacji. Testy powinny obejmować wartości puste, bardzo krótkie i bardzo długie, nietypowe znaki, wielokrotne odstępy, znaki spoza podstawowego alfabetu, nieoczekiwane typy oraz brak odpowiedzi z zewnętrznego źródła. Należy testować też powtarzanie żądania, zmianę kolejności operacji, przerwanie połączenia i jednoczesną edycję tego samego rekordu. W przypadku aplikacji używanych przez różne osoby trzeba uwzględnić także odmienne uprawnienia i zakres widocznych danych. Warto obserwować nie tylko awarie, lecz również odrzucenia i nietypowe wzorce wejścia. Nagły wzrost odrzuconych wartości może wskazywać na błąd formularza, zmianę po stronie zewnętrznego źródła albo próbę nadużycia. Dobrze przygotowany monitoring powinien rozróżniać błędy użytkownika, problemy techniczne i naruszenia reguł dostępu. Dzięki temu łatwiej ustalić priorytet oraz dobrać właściwe działanie naprawcze. Kiedy zgłosić się z unikaniem błędów w danych dynamicznych do serwisuPomoc serwisowa może być potrzebna, gdy aplikacja wyświetla zmienne treści w nieprzewidywalny sposób, formularze akceptują nieprawidłowe wartości, dane znikają po odświeżeniu albo różne części systemu pokazują odmienne wyniki. Warto zgłosić problem także wtedy, gdy pojawiają się powtarzające komunikaty o błędach, nieoczekiwane przekierowania, problemy z kodowaniem znaków lub trudne do odtworzenia awarie po zmianie przeglądarki, systemu albo urządzenia. Przed zgłoszeniem dobrze przygotować opis objawu, moment jego wystąpienia, przykładową wartość, nazwę używanego programu oraz informację, czy problem pojawia się stale, czy tylko w określonych warunkach. Nie powinno się przesyłać haseł ani pełnych danych poufnych. Można natomiast zapisać bezpieczny przykład, kolejność czynności i treść komunikatu. Takie informacje skracają analizę i pomagają odróżnić błąd danych od problemu z urządzeniem, siecią lub oprogramowaniem. W Warszawie analizę problemów związanych ze sprzętem i działaniem oprogramowania można powierzyć firmie Warszawskie Pogotowie Komputerowe 24/7. Przy zgłoszeniu warto jasno wskazać, czy potrzebne jest sprawdzenie samego urządzenia, konfiguracji, programu, sposobu zapisu danych czy całego przebiegu operacji. Pozwala to dobrać zakres kontroli i uporządkować dalsze kroki bez pochopnego usuwania informacji. Najważniejszą zasadą pozostaje traktowanie każdej wartości dynamicznej jako informacji wymagającej sprawdzenia. Należy określić jej oczekiwany typ i znaczenie, zweryfikować ją na właściwym etapie, bezpiecznie przekazać do kolejnej warstwy oraz monitorować sytuacje nietypowe. Takie podejście ogranicza liczbę błędów, ułatwia diagnozowanie i zwiększa odporność systemu na dane niepełne, zmienione albo pochodzące z nieprzewidzianego źródła. |