Bezpieczeństwo
Bezpieczny C++, dokładnie przetestowany
API Genie jest napisane w C++ dla szybkości i dla małych, samodzielnych plików binarnych. To sprawia, że staranne kodowanie i dokładne testowanie są częścią pracy, a nie dodatkiem.
Nowoczesny, rygorystyczny C++
- Kod jest napisany w C++23 i używa jego bezpieczniejszych elementów: widoków na ciągi znaków
i spanów zamiast surowych wskaźników i długości, referencji zamiast wskaźników tam, gdzie
wartość nie może być pusta, oraz wyników w stylu
std::expectedtam, gdzie błąd jest spodziewany. - Każda biblioteka jest kompilowana z rygorystycznym zestawem ostrzeżeń kompilatora na GCC, Clang i MSVC, w tym o przesłanianiu nazw, niezainicjalizowanych wartościach, arytmetyce wskaźników i stratnych konwersjach.
- Warunki wstępne i końcowe są zapisane w kodzie jako asercje, a kod musi być bezpieczny wobec wyjątków.
- Kod C stron trzecich, od którego API Genie zależy najbardziej, taki jak silnik JavaScript, sprawdzanie pisowni, parser URL i parser JSON, został przeniesiony do nowoczesnego C++ zamiast linkowany bez zmian. Lista jest na stronie podziękowań.
Niezaufane wejście ma granice
API Genie czyta pliki, których nie napisało, a w serwerze mocków także żądania z sieci. Parsery i walidatory ograniczają, jak głęboko mogą być zagnieżdżone dokumenty i wiadomości, więc wrogi lub uszkodzony plik kończy się komunikatem o błędzie, a nie awarią.
Testowane przy każdej zmianie
- Ponad 8 500 testów jednostkowych (GoogleTest) w ponad tysiącu plików testowych pokrywa biblioteki podstawowe.
- Zestawy testów zgodności: oficjalny JSON Schema Test Suite dla draftów 4, 6 i 7 oraz zestaw testów generowania kodu dla 25 celów, który buduje każdego wygenerowanego klienta i serwer kompilatorem i linterem danego celu, a potem uruchamia go względem serwera mocków API Genie, który sprawdza każde żądanie i odpowiedź względem kontraktu.
- Pull requesty są budowane i testowane na Linuksie (GCC) i Windows (MSVC). Przed każdym wydaniem bramka wydania uruchamia cały zestaw testów na Linuksie, Windows i macOS (Clang) oraz na buildzie WebAssembly.
- Podczas rozwoju kod jest też budowany z AddressSanitizer i sprawdzany przez clang-tidy (wzorce podatne na błędy i analizator statyczny Clang), a silnik wyrażeń regularnych i dekompresor są fuzzowane libFuzzerem pod AddressSanitizer i UndefinedBehaviorSanitizer.
Bezpieczne ustawienia domyślne
- Certyfikaty TLS są domyślnie weryfikowane (Mbed TLS 3.6) dla każdego połączenia
https://,wss://imqtts://. Wyłączenie weryfikacji wymaga jawnego--insecure. - Telemetria jest opcjonalna: CLI nic nie wysyła i nie zapisuje żadnego pliku telemetrii, dopóki o to nie poprosisz.
- Niewiele zewnętrznych zależności, z wersjami przypiętymi do stałej bazy vcpkg.
Weryfikowalne wydania
- Każdy plik do pobrania ma sumę kontrolną SHA-256, a każde wydanie jest względem nich weryfikowane po opublikowaniu.
- Pliki binarne dla macOS są podpisane i notaryzowane przez Apple.
Zgłaszanie problemu
Problemy z bezpieczeństwem zgłaszaj prywatnie na contact@apigenie.pl, a nie w publicznym zgłoszeniu. Inne błędy są mile widziane w systemie zgłoszeń.