Přizpůsobení pracovního postupu skenování kódu pomocí CodeQL – část 1

Dokončeno

Pracovní postupy kontroly kódu, které používají CodeQL, mají různé možnosti konfigurace, které můžete upravit tak, aby lépe vyhovovaly potřebám vaší organizace.

Když ke kontrole kódu použijete CodeQL, modul pro analýzu CodeQL vygeneruje z kódu databázi a spustí na ní dotazy. Analýza CodeQL používá výchozí sadu dotazů, ale kromě výchozích dotazů můžete zadat další dotazy, které se mají spustit.

Další dotazy můžete spouštět, pokud jsou součástí balíčku CodeQL (beta verze) publikovaného do registru kontejneru GitHubu nebo sady QL uložené v úložišti.

Existují dvě možnosti pro určení dotazů, které chcete spustit pomocí kontroly kódu CodeQL:

  • Použití pracovního postupu kontroly kódu
  • Použití vlastního konfiguračního souboru

V této lekci se dozvíte, jak upravit soubor pracovního postupu tak, aby odkazovat na další dotazy, jak používat dotazy z balíčků dotazů a jak kombinovat dotazy ze souboru pracovního postupu a vlastního konfiguračního souboru.

Zadání dalších dotazů v souboru pracovního postupu

Dostupné možnosti pro zadání dalších dotazů, které chcete spustit, jsou:

  • packs pro instalaci jednoho nebo více balíčků dotazů CodeQL (beta) a spuštění výchozí sady dotazů nebo dotazů pro tyto balíčky.
  • queries určit jeden .ql soubor, adresář obsahující více .ql souborů, .qls definiční soubor sady dotazů nebo libovolnou kombinaci.

Balíčky i dotazy můžete použít ve stejném pracovním postupu.

Nedoporučujeme odkazovat na sady dotazů přímo z github/codeql úložiště, například github/codeql/cpp/ql/src@main. Tyto dotazy nemusí být zkompilovány se stejnou verzí CodeQL, jakou se používají pro ostatní dotazy, což může vést k chybám během analýzy.

Použití balíčků dotazů CodeQL

Poznámka:

Funkce správy balíčků CodeQL, včetně balíčků CodeQL, je aktuálně v beta verzi a může se změnit.

Pokud chcete přidat jeden nebo více balíčků dotazů CodeQL (beta), přidejte with: packs: položku v uses: github/codeql-action/init@v1 části pracovního postupu. V rámci balíčků můžete zadat jeden nebo více balíčků, které se mají použít, a volitelně, kterou verzi stáhnout. Pokud nezadáte verzi, stáhne se nejnovější verze. Pokud chcete použít balíčky, které nejsou veřejně dostupné, musíte proměnnou prostředí nastavit GITHUB_TOKEN na tajný klíč, který má přístup k balíčkům.

V následujícím příkladu je rozsahem organizace nebo osobní účet, který balíček publikoval. Po spuštění pracovního postupu se tři balíčky dotazů CodeQL stáhnutí z GitHubu a výchozích dotazů nebo sady dotazů pro každé spuštění balíčku. V následujícím příkladu se každý z balíčků v seznamu stáhne podle svých specifikací.

  • Stáhne se nejnovější verze pack1 a spustí se všechny výchozí dotazy.
  • Stáhnou se verze 1.2.3 pack2 a spustí se všechny výchozí dotazy.
  • Stáhne se nejnovější verze pack3 kompatibilní s verzí 3.2.1 a spustí se všechny dotazy.
  • Verze 4.5.6 pack4 je stažena a spuštěny jsou pouze dotazy nalezené v cesta/do/dotazech.
- uses: github/codeql-action/init@v3
  with:
    # Comma-separated list of packs to download
    packs: scope/pack1,scope/pack2@1.2.3,scope/pack3@~3.2.1,scope/pack4@4.5.6:path/to/queries

Poznámka:

Pro pracovní postupy, které generují databáze CodeQL pro více jazyků, musíte místo toho zadat balíčky dotazů CodeQL v konfiguračním souboru.

Použití dotazů v balíčcích QL

Pokud chcete přidat jeden nebo více dotazů, přidejte with: queries: položku v uses: github/codeql-action/init@v3 části pracovního postupu. Pokud jsou dotazy v privátním úložišti, použijte external-repository-token parametr k určení tokenu, který má přístup k pokladně privátního úložiště.

- uses: github/codeql-action/init@v3
  with:
    # Comma-separated list of queries / packs / suites to run.
    # This may include paths or a built in suite, for example:
    # security-extended or security-and-quality.
    queries: security-extended
    # Optional. Provide a token to access queries stored in private repositories.
    external-repository-token: ${{ secrets.ACCESS_TOKEN }}

Můžete také zadat sady dotazů v hodnotě queries. Sady dotazů jsou kolekce dotazů, obvykle seskupené podle účelu nebo jazyka.

Následující sady dotazů jsou integrované do prohledávání kódu CodeQL a jsou k dispozici pro použití:

Sada dotazů Popis
security-extended Dotazy z výchozí sady a dotazy s nižší závažností a přesností
security-and-quality Dotazy z dotazů s security-extendedmožností údržby a spolehlivostí

Každá z těchto sad dotazů obsahuje jinou podmnožinu dotazů zahrnutých v integrované sadě dotazů CodeQL pro daný jazyk. Sady dotazů se automaticky generují pomocí metadat pro každý dotaz.

Když zadáte sadu dotazů, modul pro analýzu CodeQL spustí kromě výchozí sady dotazů také dotazy obsažené v sadě.

Kombinování dotazů ze souboru pracovního postupu a vlastního konfiguračního souboru

Pokud také použijete konfigurační soubor pro vlastní nastavení, použijí se všechny další balíčky nebo dotazy zadané v pracovním postupu místo těch zadaných v konfiguračním souboru. Pokud chcete spustit kombinovanou sadu dalších balíčků nebo dotazů, předpona hodnoty packs nebo queries v pracovním postupu pomocí symbolu + .

V následujícím příkladu + symbol zajistí, že se zadané další balíčky a dotazy použijí společně s libovolnými zadanými v odkazovaném konfiguračním souboru:

- uses: github/codeql-action/init@v3
  with:
    config-file: ./.github/codeql/codeql-config.yml
    queries: +security-and-quality,octo-org/python-qlpack/show_ifs.ql@main
    packs: +scope/pack1,scope/pack2@1.2.3,scope/pack3@4.5.6:path/to/queries