In che modo CodeQL analizza il codice?

Completato

L'implementazione dell'analisi del codice con CodeQL richiede una comprensione del modo in cui lo strumento analizza il codice.

Un'analisi di CodeQL è costituita da tre passaggi:

  1. Preparazione del codice creando un database CodeQL.
  2. Esecuzione di query CodeQL nel database.
  3. Interpretazione dei risultati della query.

In questa unità verranno illustrate le tre fasi dell'analisi di CodeQL.

Creazione del database

Per creare un database, CodeQL estrae prima di tutto una singola rappresentazione relazionale di ogni file di origine nella codebase.

Per i linguaggi compilati, l'estrazione funziona monitorando il normale processo di compilazione. Ogni volta che viene richiamato un compilatore per elaborare un file di origine, viene creata una copia di tale file e vengono raccolte tutte le informazioni rilevanti sul codice sorgente. Sono inclusi i dati sintattici relativi all'albero sintattico astratto e ai dati semantici relativi all'associazione dei nomi e alle informazioni sul tipo.

Per i linguaggi interpretati, l'estrattore viene eseguito direttamente nel codice sorgente, risolvendo le dipendenze per fornire una rappresentazione accurata della codebase.

È disponibile un estrattore per ogni linguaggio supportato da CodeQL per garantire che il processo di estrazione sia il più accurato possibile. I database vengono generati un linguaggio alla volta per le codebase a più linguaggi.

Dopo l'estrazione, tutti i dati necessari per l'analisi, ovvero dati relazionali, file di origine copiati e uno schema di database specifico del linguaggio, che specifica le relazioni reciproche nei dati, vengono importati in una singola directory, nota come database CodeQL.

Esecuzione della query

Dopo aver creato un database CodeQL, una o più query vengono eseguite su di esso. Le query di CodeQL vengono scritte in un linguaggio di query orientato agli oggetti progettato appositamente, denominato QL.

È possibile eseguire le query estratte dal repository CodeQL (o query personalizzate scritte manualmente) usando l'estensione CodeQL per VS Code o l'interfaccia della riga di comando di CodeQL.

Risultati della query

La fase finale converte i risultati prodotti durante l'esecuzione delle query in una forma più significativa nel contesto del codice sorgente, ovvero i risultati vengono interpretati in modo da evidenziare il potenziale problema che le query sono state progettate per trovare.

Screenshot dei risultati della query CodeQL.

Le query contengono proprietà dei metadati, che indicano come devono essere interpretati i risultati. Alcune query visualizzano ad esempio un messaggio semplice in un'unica posizione nel codice. Altre visualizzano una serie di posizioni che rappresentano i passaggi lungo un percorso del flusso di dati o del flusso di controllo, insieme a un messaggio che spiega la rilevanza del risultato. Le query che non contengono metadati non vengono interpretate; i risultati vengono restituiti come tabella e non visualizzati nel codice sorgente.

Dopo l'interpretazione, i risultati vengono restituiti per la revisione e la valutazione del codice. I risultati delle query interpretati vengono visualizzati automaticamente nel codice sorgente in CodeQL per Visual Studio Code. I risultati generati da CodeQL CLI possono essere visualizzati in diversi formati per essere utilizzati con diversi strumenti.