Wie analysiert CodeQL Code?
Die Implementierung von Codescans mit CodeQL erfordert ein Verständnis dafür, wie das Tool Code analysiert.
Die CodeQL-Analyse besteht aus drei Schritten:
- Vorbereiten des Codes durch Erstellen einer CodeQL-Datenbank.
- Ausführen von CodeQL-Abfragen für die Datenbank.
- Interpretieren der Abfrageergebnisse.
In dieser Lerneinheit erfahren Sie mehr über die drei Phasen der CodeQL-Analyse.
Datenbankerstellung
Um eine Datenbank zu erstellen, extrahiert CodeQL zunächst eine einzelne relationale Darstellung jeder Quelldatei in der Codebasis.
Bei kompilierten Sprachen erfolgt die Extraktion durch Überwachen des normalen Buildprozesses. Jedes Mal, wenn ein Compiler aufgerufen wird, um eine Quelldatei zu verarbeiten, wird eine Kopie dieser Datei erstellt, und alle relevanten Informationen zum Quellcode werden gesammelt. Dies schließt syntaktische Daten zur abstrakten Syntaxstruktur und semantische Daten zur Namensbindung sowie Typinformationen ein.
Bei interpretierten Sprachen wird der Extraktor direkt im Quellcode ausgeführt, um Abhängigkeiten aufzulösen und eine genaue Darstellung der Codebasis zu erhalten.
Es gibt einen Extraktor für jede sprache, die von CodeQL unterstützt wird, um sicherzustellen, dass der Extraktionsprozess so genau wie möglich ist. Datenbanken werden für mehrsprachige Codebasen nacheinander in jeweils einer Sprache generiert.
Nach der Extraktion werden alle für die Analyse erforderlichen Daten (relationale Daten, kopierte Quelldateien und ein sprachspezifisches Datenbankschema, das Beziehungen der Daten untereinander angibt) in ein einzelnes Verzeichnis importiert, das als CodeQL-Datenbank bezeichnet wird.
Abfrageausführung
Nachdem Sie eine CodeQL-Datenbank erstellt haben, werden eine oder mehrere Abfragen dagegen ausgeführt. CodeQL-Abfragen werden in einer speziell entworfenen objektorientierten Abfragesprache namens QL geschrieben.
Sie können die aus dem CodeQL-Repository ausgecheckten Abfragen (oder benutzerdefinierte Abfragen, die Sie selbst geschrieben haben) mithilfe der CodeQL-Erweiterung für VS Code oder der CodeQL CLI ausführen.
Abfrageergebnisse
Im letzten Schritt werden die Ergebnisse der Abfrageausführung in eine Form umgewandelt, die im Kontext des Quellcodes aussagekräftiger ist, d. h. die Ergebnisse werden so interpretiert, dass das potenzielle Problem, das die Abfrage finden soll, hervorgehoben wird.
Abfragen enthalten Metadateneigenschaften, die angeben, wie die Ergebnisse interpretiert werden sollen. Einige Abfragen zeigen beispielsweise eine einfache Meldung an einer einzelnen Stelle im Code an. Andere Abfragen zeigen eine Reihe von Stellen an, die Schritte entlang eines Datenfluss- oder Ablaufsteuerungspfads darstellen, sowie eine Meldung, die die Bedeutung des Ergebnisses erläutert. Abfragen ohne Metadaten werden nicht interpretiert. ihre Ergebnisse werden als Tabelle ausgegeben und nicht im Quellcode angezeigt.
Nach der Interpretation werden die Ergebnisse für Code Review und Triage ausgegeben. In CodeQL für Visual Studio Code werden interpretierte Abfrageergebnisse automatisch im Quellcode angezeigt. Sie können die von der CodeQL CLI generierten Ergebnisse für die Verwendung mit verschiedenen Tools in verschiedenen Formaten ausgeben.