Zabezpieczenia i dane użytkownika

Dane użytkownika, które są dowolnym rodzajem danych wejściowych (dane z żądania internetowego lub adresu URL, dane wejściowe do kontrolek aplikacji Microsoft Windows Forms itd.), mogą mieć negatywny wpływ na kod, ponieważ często dane są używane bezpośrednio jako parametry do wywoływania innego kodu. Taka sytuacja jest analogiczna do złośliwego kodu wywołującego kod z dziwnymi parametrami i należy podjąć te same środki ostrożności. Dane wejściowe użytkownika są w rzeczywistości trudniejsze do zapewnienia bezpieczeństwa, ponieważ nie ma ramki stosu do śledzenia obecności potencjalnie niezaufanych danych.

Są to najsubtelniejsze i najtrudniejsze usterki zabezpieczeń do znalezienia, ponieważ chociaż mogą istnieć w kodzie, który jest pozornie niepowiązany z zabezpieczeniami, są one bramą do przekazywania nieprawidłowych danych do innego kodu. Aby wyszukać te usterki, postępuj zgodnie z dowolnym rodzajem danych wejściowych, wyobraź sobie, jaki może być zakres możliwych wartości, i zastanów się, czy kod, który widzi te dane, może obsłużyć wszystkie te przypadki. Te usterki można naprawić za pomocą sprawdzania zakresu i odrzucania wszystkich danych wejściowych, których kod nie może obsłużyć.

Oto kilka ważnych zagadnień dotyczących danych użytkownika:

  • Wszystkie dane użytkownika w odpowiedzi serwera są uruchamiane w kontekście lokacji serwera na kliencie. Jeśli serwer sieci Web pobiera dane użytkownika i wstawia je do zwróconej strony sieci Web, może na przykład dołączyć <tag skryptu> i uruchomić go tak, jakby z serwera.

  • Pamiętaj, że klient może zażądać dowolnego adresu URL.

  • Rozważ trudne lub nieprawidłowe ścieżki:

    • .. \ , bardzo długie ścieżki.

    • Użycie symboli wieloznacznych (*).

    • Rozszerzanie tokenu (%token%).

    • Dziwne formy ścieżek ze specjalnym znaczeniem.

    • Alternatywne nazwy strumieni systemu plików, takie jak filename::$DATA.

    • Krótkie wersje nazw plików, takie jak longfi~1 dla longfilename.

  • Pamiętaj, że Eval(userdata) może wykonywać dowolne czynności.

  • Uważaj na opóźnione powiązanie z nazwą zawierającą niektóre dane użytkownika.

  • Jeśli masz do czynienia z danymi internetowymi, rozważ różne formy ucieczki, które są dopuszczalne, w tym:

    • Ucieczki szesnastkowe (%nn).

    • Znaki ucieczki Unicode (%nnn).

    • Overlong UTF-8 ucieczki (%nn%nn).

    • Podwójne ucieczki (%nn staje się %mmnn, gdzie %mm jest ucieczką dla '%').

  • Należy pamiętać o nazwach użytkowników, które mogą mieć więcej niż jeden format kanoniczny. Na przykład często można użyć formularza MYDOMAIN\username lub formularza username@mydomain.example.com.

Zobacz też