| Termin | Definicja |
|---|---|
| Parametryzacja zapytań | Parametryzacja zapytań to przekazywanie wartości jako parametrów zamiast wklejania ich do treści polecenia — chroni przed SQL injection i sprzyja ponownemu użyciu planu. Czym jest parametryzacja zapytańParametryzacja zapytań polega na oddzieleniu treści polecenia od danych dostarczanych przez użytkownika albo program. W praktyce oznacza to przygotowanie stałego wzorca zapytania, a następnie przekazanie wartości za pomocą osobnych parametrów. Silnik bazy danych otrzymuje więc informację, które elementy są instrukcją, a które zwykłym tekstem przeznaczonym do wyszukania, zapisania lub porównania. Przykładowo zamiast tworzyć polecenie przez łączenie fragmentu SQL z tekstem wpisanym w formularzu, stosuje się wzorzec w rodzaju Takie rozdzielenie zwiększa bezpieczeństwo aplikacji, ułatwia kontrolę typów danych i porządkuje kod odpowiedzialny za komunikację z bazą. Parametryzacja nie ogranicza się przy tym do zapytań odczytujących dane. Może być używana również przy dodawaniu rekordów, ich aktualizowaniu, usuwaniu oraz wykonywaniu poleceń z wieloma warunkami. Kontekst techniczny i porównanie sposobów budowania zapytańNajwiększa różnica występuje między parametryzacją a ręcznym sklejaniem tekstu. W podejściu opartym na konkatenacji program tworzy całe polecenie jako jeden ciąg znaków. Jeżeli fragment pochodzi z formularza, adresu internetowego, pliku lub innego zewnętrznego źródła, nieprawidłowo zabezpieczona wartość może zmienić znaczenie polecenia. W parametryzowanym zapytaniu wartość jest przekazywana osobno, dzięki czemu znaki specjalne znajdujące się w danych nie powinny zostać potraktowane jako instrukcja. Parametryzacja może też poprawić powtarzalność wykonywania operacji. Wzorzec zapytania pozostaje niezmienny, a zmieniają się tylko wartości parametrów. W wielu systemach bazodanowych ułatwia to ponowne wykorzystanie przygotowanej struktury zapytania oraz ogranicza koszt wielokrotnego analizowania tej samej składni. Nie należy jednak zakładać, że samo użycie parametrów rozwiązuje każdy problem wydajnościowy. Znaczenie mają także indeksy, selektywność warunków, liczba zwracanych kolumn, sposób sortowania i plan wykonania. Parametryzacja dotyczy przede wszystkim wartości, takich jak identyfikatory, daty, liczby, nazwy lub tekst wyszukiwany. Nie zawsze można za jej pomocą podstawić nazwę tabeli, nazwę kolumny albo kierunek sortowania. Elementy struktury zapytania powinny być w takich przypadkach wybierane z zamkniętej listy dozwolonych opcji, a nie przyjmowane bezpośrednio z danych zewnętrznych. Dodatkową warstwę ochrony stanowią odpowiednie uprawnienia konta używanego przez aplikację, walidacja danych wejściowych i ograniczenie dostępu do niepotrzebnych tabel. W bibliotekach programistycznych spotyka się zapytania przygotowane wcześniej, instrukcje z nazwanymi parametrami oraz mechanizmy mapowania obiektów na rekordy. Niezależnie od wybranej formy należy sprawdzić, czy biblioteka rzeczywiście wysyła wartości jako parametry, a nie tylko wykonuje pozorne zastępowanie tekstu. Istotne jest również prawidłowe wiązanie typów, ponieważ traktowanie liczby, daty i tekstu jako tego samego rodzaju danych może prowadzić do błędnych wyników albo niepotrzebnego obciążenia. Typowe problemy i błędy związane z parametryzacjąCzęstym błędem jest parametryzowanie tylko części zapytania przy jednoczesnym pozostawieniu innych danych wklejanych bezpośrednio do tekstu. Przykładowo bezpiecznie obsłużony warunek wyszukiwania nie chroni całej operacji, jeżeli nazwa sortowanej kolumny lub dodatkowy warunek są budowane z niezweryfikowanego wejścia. Każdy fragment pochodzący spoza aplikacji powinien mieć jasno określony sposób obsługi. Problemy pojawiają się także wtedy, gdy parametry są stosowane w niewłaściwym miejscu składni albo przekazywane w liczbie niezgodnej z liczbą znaczników. Może to skutkować błędem wykonania, pominięciem warunku lub nieoczekiwanym dopasowaniem rekordów. Warto sprawdzać komunikaty biblioteki, logować typ operacji i testować zapytania dla pustych wartości, znaków diakrytycznych, długich tekstów oraz danych zawierających cudzysłowy. Nie powinno się mylić parametryzacji z filtrowaniem znaków. Usuwanie wybranych symboli z tekstu albo ręczne dodawanie znaków ucieczki jest rozwiązaniem zależnym od składni, sterownika i konfiguracji. Może być pomocne w określonych zastosowaniach, lecz nie zastępuje właściwego wiązania parametrów. Podobnie kontrola długości pola ogranicza zakres danych, ale sama nie rozdziela instrukcji od wartości. W aplikacjach korzystających z kilku warstw dostępu do danych należy ustalić, gdzie dokładnie powstaje zapytanie. Kod może wyglądać na parametryzowany na poziomie formularza, lecz później parametr może zostać ponownie zamieniony na tekst w repozytorium, module raportowym albo pomocniczej funkcji filtrowania. Przydatny jest przegląd całego przepływu danych: od miejsca pobrania wartości, przez walidację i mapowanie, aż do wywołania sterownika bazy. Nieprawidłowo przygotowane zapytania mogą powodować nie tylko ryzyko wstrzyknięcia SQL. Skutkiem bywają również niepełne wyniki, błędne aktualizacje, problemy z kodowaniem znaków, trudne do odtworzenia wyjątki oraz spadki wydajności. Dlatego testy powinny obejmować zarówno przypadki bezpieczeństwa, jak i zwykłe scenariusze biznesowe, w których parametry zawierają wartości puste, graniczne albo nietypowe. W jakich sytuacjach warto skorzystać z pomocy serwisu - Parametryzacja zapytańWsparcie serwisu komputerowego może być przydatne, gdy aplikacja niespodziewanie odrzuca zapytania, przestaje wyszukiwać dane po aktualizacji programu albo wyświetla błędy tylko dla określonych znaków i wartości. Zgłoszenia wymagają także sytuacje, w których program długo oczekuje na wynik, wykonuje niepełne operacje lub zachowuje się inaczej na różnych komputerach mimo używania tych samych danych. Przed przekazaniem sprzętu lub aplikacji do sprawdzenia warto przygotować opis objawu, moment jego występowania, nazwę używanego programu oraz przykładową operację, która kończy się błędem. Nie należy przekazywać haseł ani pełnych danych klientów. Wystarczające mogą być zanonimizowane wartości, komunikat błędu i informacja, czy problem pojawia się przy odczycie, zapisie, filtrowaniu lub sortowaniu. W przypadku laptopa w warszawskim serwisie można skorzystać z darmowej diagnozy LAPTOPA, aby ustalić, czy źródłem kłopotu jest sam program, konfiguracja środowiska, sterownik, nośnik danych czy inny element komputera. Taka weryfikacja pomaga oddzielić błąd parametryzacji od problemu sprzętowego i dobrać dalsze działania do rzeczywistej przyczyny. Jeżeli zapytania są częścią starszej aplikacji, systemu magazynowego, programu do obsługi dokumentów lub lokalnej bazy danych, pomocne bywa sprawdzenie wersji środowiska, sterownika oraz kopii zapasowej. Szczególną ostrożność należy zachować przed zmianami w produkcyjnych danych. Najpierw powinno się wykonać kopię, odtworzyć problem na bezpiecznym zbiorze testowym i dopiero potem wprowadzać poprawki w kodzie albo konfiguracji. |