W jaki sposób kod CodeQL analizuje?

Zakończone

Implementowanie skanowania kodu za pomocą języka CodeQL wymaga zrozumienia sposobu analizowania kodu przez narzędzie.

Analiza CodeQL składa się z trzech kroków:

  1. Przygotowywanie kodu przez utworzenie bazy danych CodeQL.
  2. Uruchamianie zapytań CodeQL względem bazy danych.
  3. Interpretowanie wyników zapytania.

W tej lekcji poznasz trzy fazy analizy CodeQL.

Tworzenie bazy danych

Aby utworzyć bazę danych, codeQL najpierw wyodrębnia pojedynczą reprezentację relacyjną każdego pliku źródłowego w bazie kodu.

W przypadku skompilowanych języków wyodrębnianie działa przez monitorowanie normalnego procesu kompilacji. Za każdym razem, gdy kompilator jest wywoływany w celu przetworzenia pliku źródłowego, tworzona jest kopia tego pliku, a wszystkie istotne informacje o kodzie źródłowym są zbierane. Obejmuje to dane składniowe dotyczące abstrakcyjnego drzewa składni i danych semantycznych dotyczących powiązania nazw i informacji o typie.

W przypadku języków interpretowanych funkcja wyodrębniania jest uruchamiana bezpośrednio w kodzie źródłowym, rozpoznając zależności, aby zapewnić dokładną reprezentację bazy kodu.

Istnieje jeden moduł wyodrębniania dla każdego języka obsługiwanego przez język CodeQL, aby upewnić się, że proces wyodrębniania jest tak dokładny, jak to możliwe. W przypadku baz kodu w wielu językach bazy danych są generowane pojedynczo w jednym języku.

Po wyodrębnieniu wszystkie dane wymagane do analizy (dane relacyjne, skopiowane pliki źródłowe i schemat bazy danych specyficzny dla języka, który określa wzajemne relacje danych) są importowane do pojedynczego katalogu, znanego jako baza danych CodeQL.

Wykonywanie zapytania

Po utworzeniu bazy danych CodeQL co najmniej jedno zapytanie jest wykonywane względem niej. Zapytania CodeQL są pisane w specjalnie zaprojektowanym języku zapytań zorientowanym na obiekt o nazwie QL.

Zapytania pobrane z repozytorium CodeQL (lub niestandardowe zapytania, które napisałeś/aś samodzielnie) można uruchomić przy użyciu rozszerzenia CodeQL dla edytora VS Code lub interfejsu wiersza polecenia CodeQL.

Wyniki zapytania

Ostatni krok konwertuje wyniki generowane podczas wykonywania zapytania na formularz, który jest bardziej zrozumiały w kontekście kodu źródłowego, co oznacza, że wyniki są interpretowane w sposób, który wyróżnia potencjalny problem, który ma być przeznaczony do znalezienia zapytań.

Zrzut ekranu przedstawiający wyniki zapytania CodeQL.

Zapytania zawierają właściwości metadanych wskazujące sposób interpretowania wyników. Na przykład niektóre zapytania wyświetlają prosty komunikat w jednej lokalizacji w kodzie. Inne wyświetlają serię lokalizacji reprezentujących kroki wzdłuż ścieżki przepływu danych lub przepływu sterowania wraz z komunikatem wyjaśniającym znaczenie wyniku. Zapytania, które nie mają metadanych, nie są interpretowane; ich wyniki są danymi wyjściowymi jako tabelą i nie są wyświetlane w kodzie źródłowym.

Zgodnie z interpretacją wyniki są danymi wyjściowymi przeglądu i klasyfikacji kodu. W języku CodeQL dla programu Visual Studio Code wyniki interpretowanych zapytań są automatycznie wyświetlane w kodzie źródłowym. Wyniki generowane przez interfejs wiersza polecenia CodeQL można wyświetlić w wielu różnych formatach do użycia z różnymi narzędziami.