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::expected tam, 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:// i mqtts://. 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ń.