Bezpieczeństwo i eksploatacja — NextPDF w CodeIgniter 4
W skrócie
Dział zatytułowany „W skrócie”Ta strona opisuje zagrożenia, na które ta integracja musi być odporna, zabezpieczenia zweryfikowane w kodzie źródłowym pakietu oraz zasady eksploatacyjne, których należy przestrzegać, aby wdrożenie pozostało bezpieczne.
Model zagrożeń
Dział zatytułowany „Model zagrożeń”Należy uwzględnić trzy powierzchnie, na które może wpływać atakujący.
- Ładunek zadania kolejki. Kolejka przechowuje dane zadania. Atakujący z dostępem do brokera może je zmienić. Należy traktować je jako niezaufane, zdeserializowane dane wejściowe.
- Nazwa pliku w odpowiedzi. Użytkownik może podać nazwę pliku do pobrania. Złośliwa nazwa może wstrzyknąć treść do nagłówka.
- Ścieżki konfiguracji. Ścieżka czcionek oraz ścieżki podpisywania pochodzą z konfiguracji. Złośliwa ścieżka może spowodować odczyt danych z niewłaściwej lokalizacji albo zapis do niej.
Zabezpieczenie 1 — lista dozwolonych ładunków kolejki
Dział zatytułowany „Zabezpieczenie 1 — lista dozwolonych ładunków kolejki”Zadanie kolejki traktuje ładunek jako niezaufane, zdeserializowane dane. Application Security Verification Standard (ASVS) organizacji Open Worldwide Application Security Project (OWASP) wymaga bezpiecznej obsługi danych wejściowych w przypadku zdeserializowanych niezaufanych danych (ASVS V1.5.2).
Zweryfikowane zabezpieczenia w GeneratePdfJob:
- Builder musi być niepustym ciągiem znaków. Zadanie odrzuca każdy inny typ.
- Builder musi pasować do wzorca
App\PdfBuilders\<Class>::<method>. Zadanie odrzuca każdą inną przestrzeń nazw, zwykłe funkcje oraz ładunki z przedrostkiem lub przyrostkiem. - Builder musi być wywoływalny (callable). Zadanie odrzuca ciąg znaków, który pasuje do wzorca, ale nie rozwiązuje się do callable.
Reguły te łącznie blokują wykonanie dowolnego kodu przez zmanipulowany ładunek kolejki. Testy pakietu weryfikują każdy przypadek odrzucenia.
Zabezpieczenie 2 — ograniczenie ścieżki wyjściowej kolejki
Dział zatytułowany „Zabezpieczenie 2 — ograniczenie ścieżki wyjściowej kolejki”Zadanie zapisuje plik na dysku. OWASP ASVS wymaga bezpiecznej obsługi ścieżek, gdy aplikacja tworzy ścieżki plików na potrzeby operacji plikowych (ASVS V5.3.2).
Zweryfikowane zabezpieczenia w GeneratePdfJob:
- Ścieżka wyjściowa musi być niepustym ciągiem znaków.
- Zadanie normalizuje ścieżkę przed każdą weryfikacją. Rozwiązuje segmenty
.oraz..i konwertuje separatory. - Znormalizowana ścieżka musi znajdować się wewnątrz
WRITEPATH/pdfs/. Zadanie odrzuca katalog równorzędny ze wspólnym przedrostkiem nazwy (pdfs-evil/). - Ścieżka musi kończyć się na
.pdf(bez rozróżniania wielkości liter).
Te reguły blokują zapis dowolnych plików za pomocą zmanipulowanego ładunku.
Zabezpieczenie 3 — utwardzenie nagłówków odpowiedzi
Dział zatytułowany „Zabezpieczenie 3 — utwardzenie nagłówków odpowiedzi”PdfResponse dołącza stały, utwardzony zestaw nagłówków do każdej odpowiedzi w formacie Portable Document Format (PDF):
| Nagłówek | Wartość |
|---|---|
X-Content-Type-Options | nosniff |
X-Frame-Options | DENY |
Content-Security-Policy | default-src 'none' |
X-Robots-Tag | noindex, nofollow |
Referrer-Policy | no-referrer |
Cache-Control | private, max-age=0, must-revalidate |
Pakiet sanityzuje nazwę pliku, zanim zostanie ona umieszczona w nagłówku. Usuwa separatory ścieżek, bajty zerowe oraz znaki carriage return i line feed (CR/LF). Stosuje znaki ucieczki dla prostych cudzysłowów w wartości cytowanej. Dodaje parametr filename*=UTF-8''… zgodny z Request for Comments (RFC) 5987 dla nazw spoza zakresu ASCII. Pusta nazwa staje się document.pdf.
Zabezpieczenie 4 — walidacja ścieżek konfiguracji
Dział zatytułowany „Zabezpieczenie 4 — walidacja ścieżek konfiguracji”Rejestr czcionek odrzuca wartość fontsPath, która zawiera wrapper strumienia (://) lub bajt zerowy, i zgłasza błąd czasu wykonania. Blokuje to ścieżki z wrapperem, takie jak php:// lub phar://.
Zabezpieczenie 5 — minimalna powierzchnia lokatora usług
Dział zatytułowany „Zabezpieczenie 5 — minimalna powierzchnia lokatora usług”CodeIgniter 4 nie udostępnia kontenera zgodnego z PHP Standards Recommendation 11 (PSR-11). Korzysta z lokatora Services. PSR-11 §1.3 traktuje wzorzec lokatora usług jako niezalecany (modalne SHOULD NOT). Pakiet ogranicza powierzchnię lokatora: każda usługa ma jedną nazwaną metodę fabryczną. Rozwiązuj usługi na granicy kontrolera. Przekazuj konkretne obiekty w głąb. Nie przekazuj klasy Services do kodu domenowego.
Operacje podpisywania i TSA (NextPDF Pro / Enterprise)
Dział zatytułowany „Operacje podpisywania i TSA (NextPDF Pro / Enterprise)”Usługa podpisywania jest domyślnie nieaktywna. Aktywuje się tylko wtedy, gdy signature.enabled ma wartość true, a signature.certificate jest niepuste. Domyślny poziom podpisu w pakiecie to B-B. NextPDF Pro zapewnia podpis bazowy B-B. Walidacja długoterminowa to odrębna funkcja Enterprise, opisana w dokumentacji Premium, a nie tutaj.
Zasady eksploatacyjne:
- Nie umieszczaj plików certyfikatów i kluczy w systemie kontroli wersji. Dostarczaj je przez
.envlub menedżera sekretów. - W środowisku produkcyjnym zachowuj wartość
falsedlatsa.allow_insecure_http. Kanał urzędu znakowania czasem (Time Stamping Authority, TSA) działający jawnie jest niedopuszczalny. - Ustaw
tsa.pinned_public_keys, gdy TSA publikuje stabilny klucz. Zachowuj wartośćtruedlatsa.warn_on_key_rotation. - Ogranicz dostęp do odczytu pliku klucza wyłącznie do użytkownika aplikacji.
Lista kontrolna eksploatacji
Dział zatytułowany „Lista kontrolna eksploatacji”- Przypnij wszystkie ustalone wersje w pliku
composer.lock. - Wymagaj pakietu
codeigniter4/queuew aplikacji, która uruchamia workery. - Uruchom worker kolejki jako użytkownik o niskich uprawnieniach. Nadaj mu dostęp do zapisu wyłącznie w
WRITEPATH/pdfs/. - Zapewnij workerowi te same rozszerzenia NextPDF, które ma warstwa webowa. Podpisany plik PDF wymaga NextPDF Pro lub Enterprise w środowisku workera.
- Upewnij się, że rozszerzenia
mbstringorazzlibsą dostępne w każdym środowisku uruchomieniowym, które buduje plik PDF. - Upewnij się, że nagłówki odpowiedzi przechodzą przez reverse proxy bez zmian.
- Rejestruj generowanie plików PDF wraz z kontekstem. Nie rejestruj materiału certyfikatów ani haseł do kluczy.
Zgodność
Dział zatytułowany „Zgodność”- Obsługa ładunku kolejki jest zgodna z OWASP ASVS V1.5.2.
- Obsługa ścieżki wyjściowej kolejki jest zgodna z OWASP ASVS V5.3.2.
- Projekt lokatora usług jest zgodny z wytycznymi PSR-11 §1.3.
Kontekst komercyjny
Dział zatytułowany „Kontekst komercyjny”Rdzeń NextPDF jest objęty licencją Apache-2.0. Kotwice zaufania dla podpisu oraz utwardzenie TSA mają zastosowanie po zainstalowaniu NextPDF Pro lub Enterprise. Pakiet CodeIgniter udostępnia odpowiednie metody usług, które zwracają null, dopóki odpowiedni pakiet Premium nie zostanie zainstalowany. Zobacz </get-license/?intent=codeigniter-signing>.
Zobacz także
Dział zatytułowany „Zobacz także”- /integrations/codeigniter/production-usage/ — prawidłowa rejestracja i wysyłanie zadań do kolejki.
- /integrations/codeigniter/configuration/ — klucze podpisywania, TSA i ścieżki.
- /integrations/codeigniter/troubleshooting/ — zweryfikowane komunikaty o odrzuceniu.
- /integrations/codeigniter/overview/ — pełna powierzchnia API.