Skrzynka pocztowa raportowania jest granicą wejściową, a nie zaufanym źródłem danych. Załącznik może być zniekształcony, zbyt duży lub celowo kosztowny w obróbce. Zbuduj ścieżkę pozyskiwania tak, aby akceptacja transportu nie oznaczała automatycznie akceptacji analizatora składni, a akceptacja analizatora składni nie oznaczała automatycznie, że oświadczenia raportu są godne zaufania.
RFC 9990 opisuje zagregowaną dostawę XML i ostrzega o wyczerpaniu zasobów i fałszywych informacjach. Poniższy schemat stanowi zalecenie dotyczące wdrożenia, a nie twierdzenie, że konkretny produkt zapewnia już te elementy sterujące.
Wyodrębnij spożycie z analizy
Referencje: RFC 9990 §8.1, RFC 9990 §8.2.
Przypisz identyfikator przybycia i zachowaj ograniczone odniesienie z kontrolą dostępu do oryginalnego załącznika. Zapisz jego rozmiar, odcisk palca, czas przybycia i metadane transportu. Zastosuj kontrolę zasobów kolejek i źródeł, aby jeden strumień nie mógł zmonopolizować pracowników. Traktuj adres nadawcy lub znaną nazwę pliku jako niewystarczający dowód autentyczności.
Trzymaj pracownika minimalnie uprzywilejowanego i oddzielonego od poświadczeń bazy danych używanych do publikowania ostatecznych metryk. Uniemożliwiaj zawartości załącznika określanie poleceń wykonywalnych lub ścieżek docelowych. Błędne dane wejściowe należą do kontrolowanej ścieżki diagnostycznej, a nie do publicznych stron błędów lub nieograniczonych dzienników.
Związana dekompresja podczas działania
Referencje: RFC 9990 §3.5.2, RFC 9990 §8.1.
RFC 9990 określa XML i zaleca kompresję GZIP. Wykryj obsługiwany format i odrzuć nieobsługiwane kontenery zgodnie z udokumentowaną polityką zgodności. Jeśli starsze formaty archiwów są celowo obsługiwane, przejrzyj związane z nimi dodatkowe ryzyko związane z ekstrakcją i ścieżką, zamiast traktować je jako równoważne pojedynczemu strumieniowi XML.
Ustaw limity skompresowanych bajtów, rozszerzonych bajtów, czasu przetwarzania, pamięci, liczby rekordów i współbieżności. Egzekwuj limity rozmiaru rozwiniętego podczas odczytu, a nie po przydzieleniu całego wyniku. Deklaracje wielkości wewnątrz kontenera nie zastępują pomiaru rzeczywistej wydajności. Zatrzymaj przetwarzanie po osiągnięciu skonfigurowanego limitu.
Analizuj bez zbędnych możliwości
Referencje: RFC 9990 §3.1.1, RFC 9990 §8.1.
Odniesienie: Zapobieganie podmiotom zewnętrznym OWASP XML, wskazówki ogólne.
Użyj utrzymywanego analizatora składni z przejrzaną jego rzeczywistą konfiguracją środowiska wykonawczego. Wyłącz niepotrzebne typy dokumentów, rozpoznawanie podmiotów zewnętrznych, XInclude i pobieranie zasobów zewnętrznych. Traktuj nieobsługiwane ustawienia wzmacniania zabezpieczeń jako błędy konfiguracji, a nie ostrzeżenia, które należy zignorować. Tam, gdzie wymagana jest weryfikacja, używaj zaufanych schematów lokalnych, zamiast podążać za lokalizacjami schematów dostarczonymi w załączniku. Zastosuj ograniczenia dotyczące zagnieżdżenia i rozmiaru tekstu, a także całkowitej liczby bajtów.
Sprawdź oczekiwaną strukturę raportu i semantykę pól niezależnie od poprawności XML. Dokument może być dobrze sformułowany, ale nie nadawać się do użytku jako plik DMARC raport. Zachowaj powód odrzucenia bez przekładania błędu analizatora na werdykt uwierzytelnienia poczty.
Użyj małego ograniczonego urządzenia
Przykładowa konfiguracja pomostowa: pozwala na skompresowane dane wejściowe o wielkości 64 KiB i rozszerzone dane wyjściowe o wielkości 256 KiB dla celowo małego pracownika testowego. Nieszkodliwe urządzenie GZIP rozszerza się do 300 KiB powtarzalnego tekstu testowego. Oczekiwanym rezultatem jest zatrzymanie w rozszerzonym rozmiarze przed pełną materializacją, brak zatwierdzonych wierszy raportu i diagnostyka zawierająca limit i odniesienie do danych wejściowych.
Liczby te stanowią limity demonstracyjne, a nie porady dotyczące wielkości produkcji. Natychmiast po tym przetestuj ważny mały raport, aby sprawdzić, czy pracownik nadal nadaje się do użytku. Zanim zgłosisz, że kontrola działa, zapisz rzeczywiste pomiary. W tym artykule opisano wymagane zachowanie tymczasowe, a nie wykonany test dzierżawy. Pakiet przeglądowy rejestruje także nową ograniczoną demonstrację GZIP w języku Python: wykrywa rozszerzenie poza limit 256 KiB z maksymalnie jednym dodatkowym bajtem wykrywania, a następnie pomyślnie obsługuje niewielki prawidłowy strumień tekstu XML. To pokazuje tylko lokalną ochronę dekompresji, a nie wzmacnianie parsera, izolację pamięci lub zachowanie bazy danych.
Zatwierdzaj tylko zweryfikowane dane
Referencje: RFC 9990 §3.5.4, RFC 9990 §9.2.
Przygotuj znormalizowane rekordy i zakończ importowanie atomowo po sprawdzeniu poprawności i obsłudze duplikatów. Przerwany plik nie powinien pozostawiać częściowego zliczenia w analizach produkcyjnych. Ustaw powtórkę jako idempotentną i zachowaj decyzję łączącą powtarzające się przybycia ze zliczonym raportem.
Monitoruj odrzucone bajty, czas przetwarzania, wiek kolejki i wyniki odzyskiwania. Prawidłowe raporty mogą przekraczać lokalne limity, dlatego zapewnij kontrolowaną ścieżkę przeglądu, zamiast automatycznie podnosić każdy limit. Zamknij projekt operacyjny z nazwanymi właścicielami w celu przyjęcia, konserwacji analizatora składni, przechowywania danych i reagowania na incydenty.