Hvordan analyserer CodeQL kode?
Implementering af kodescanning med CodeQL kræver en forståelse af, hvordan værktøjet analyserer kode.
CodeQL-analyse består af tre trin:
- Forbereder koden ved at oprette en CodeQL-database.
- Kørsel af CodeQL-forespørgsler mod databasen.
- Fortolkning af forespørgselsresultaterne.
I dette undermodul får du mere at vide om de tre faser i CodeQL-analysen.
Databaseoprettelse
Hvis du vil oprette en database, udtrækker CodeQL først en enkelt relationsrepræsentation af hver kildefil i kodebasen.
For kompilerede sprog fungerer udtrækningen ved at overvåge den normale buildproces. Hver gang en compiler aktiveres for at behandle en kildefil, oprettes der en kopi af filen, og alle relevante oplysninger om kildekoden indsamles. Dette omfatter syntaktiske data om det abstrakte syntakstræ og semantiske data om navnebinding og typeoplysninger.
For fortolkede sprog kører udtrækningen direkte på kildekoden og løser afhængigheder for at give en nøjagtig repræsentation af kodebasen.
Der er én udtrækning for hvert sprog, der understøttes af CodeQL, for at sikre, at udtrækningsprocessen er så nøjagtig som muligt. I forbindelse med kodebaser med flere sprog genereres databaser ét sprog ad gangen.
Efter udtrækningen importeres alle de data, der kræves til analyse (relationsdata, kopierede kildefiler og et sprogspecifikt databaseskema, der angiver de gensidige relationer i dataene), til en enkelt mappe, der kaldes en CodeQL-database.
Udførelse af forespørgsel
Når du har oprettet en CodeQL-database, udføres en eller flere forespørgsler mod den. CodeQL-forespørgsler skrives i et specialdesignet objektorienteret forespørgselssprog kaldet QL.
Du kan køre de forespørgsler, der er tjekket ud fra CodeQL-lageret (eller brugerdefinerede forespørgsler, som du selv har skrevet) ved hjælp af CodeQL for VS Code-udvidelsen eller CodeQL-kommandolinjegrænsefladen.
Forespørgselsresultater
Det sidste trin konverterer resultater, der er produceret under udførelse af forespørgsler, til en formular, der er mere meningsfuld i forbindelse med kildekoden, hvilket betyder, at resultaterne fortolkes på en måde, der fremhæver det potentielle problem, som forespørgslerne er designet til at finde.
Forespørgsler indeholder metadataegenskaber, der angiver, hvordan resultaterne skal fortolkes. Nogle forespørgsler viser f.eks. en simpel meddelelse på en enkelt placering i koden. Andre viser en række placeringer, der repræsenterer trin langs en dataflow- eller kontrolflowsti sammen med en meddelelse, der forklarer betydningen af resultatet. Forespørgsler, der ikke har metadata, fortolkes ikke. resultaterne vises som en tabel og vises ikke i kildekoden.
Efter fortolkning er resultaterne output til kodegennemgang og -triaging. I CodeQL til Visual Studio Code vises fortolkede forespørgselsresultater automatisk i kildekoden. Du kan sende resultater, der er genereret af CodeQL-kommandolinjegrænsefladen, til en række forskellige formater til brug med forskellige værktøjer.