Aangepaste query's gebruiken met CodeQL
Als u geen aangepast configuratiebestand hebt opgegeven in uw pijplijninstallatie, voert CodeQL het security-extended
querypakket uit om uw code te analyseren. U kunt aangepaste CodeQL-query's gebruiken om uw eigen query's te schrijven om specifieke beveiligingsproblemen en fouten te vinden. U moet ook een aangepast configuratiebestand maken om de standaardanalyse van CodeQL te wijzigen.
Als u bestaande aangepaste query's wilt zoeken of uw eigen aangepaste query wilt bijdragen, raadpleegt u Bijdragen aan CodeQL.
Analyse met aangepaste query's
De snelste manier om te beginnen met een aangepaste query is door een query te schrijven en op te slaan in uw lokale Azure DevOps-opslagplaats. U kunt de details van een aangepaste query aanpassen aan uw behoeften, maar deze moet ten minste een regel-id hebben. Zie CodeQL-query's schrijven voor meer informatie over het schrijven van uw eigen CodeQL-query. U kunt ook meerdere query's bundelen in een querysuite of pakketten gebruiken die zijn gepubliceerd door andere personen. Zie Publiceren en gebruiken van CodeQL-pakketten voor meer informatie.
Een aangepast configuratiebestand gebruiken
Een aangepast configuratiebestand is een manier om te beheren welke query's worden uitgevoerd tijdens de analyse van CodeQL op basis van uw code. U kunt meer query's of querypakketten opgeven die moeten worden uitgevoerd en de standaardCodeQL-query's wijzigen of uitschakelen.
Als u een specifieke query wilt opnemen die u wilt opnemen, geeft u de query op met een naam en pad naar de locatie van het querybestand (.ql) in uw opslagplaats.
Als u een specifiek pakket wilt opnemen dat u wilt opnemen, geeft u de naam van het pakket op. U kunt een willekeurig aantal CodeQL-querypakketten opgeven dat moet worden uitgevoerd in uw configuratiebestand.
De volgende stap bestaat uit het maken van een qlpack.yml
bestand. Dit bestand declareert het CodeQL-pakket en informatie hierover. Bestanden *.ql
in dezelfde map (of submap) als een qlpack.yml
onderdeel van het pakket worden beschouwd.
Tip
Het packs
-filter van het configuratiebestand biedt ondersteuning voor het downloaden van pakketten uit opslagplaatsen die worden gehost in GitHub, hoewel het queries
-filter dat niet doet.
Als het pakket privé is in GitHub, moet u een GitHub-toegangstoken opgeven via de AdvancedSecurity-Codeql-Init@1
taak als een omgevingsvariabele en variabelenaam als GITHUB_TOKEN
, met het bereik van het token .read:packages
Hier volgt een voorbeeld van een configuratiebestand:
name: "Run custom queries"
# When using a configuration file, if you do not disable default queries,
# then the default CodeQL queries in the `code-scanning` query suite will also execute upon analysis.
disable-default-queries: true
# To reference local queries saved to your repository,
# the path must start with `./` followed by the path to the custom query or queries.
# Names for each query referenced is optional.
queries:
- name: Use security-extended query suite
uses: security-extended
- name: Use local custom query (single query)
uses: ./customQueries/javascript/FindTestFunctions.ql
- name: Use local custom query (directory of queries)
uses: ./customQueries/javascript/MemoryLeakQueries
packs:
- mygithuborg/mypackname
paths:
- src
paths-ignore:
- src/node_modules
- '**/*.test.js'
query-filters:
- include:
kind: problem
- include:
precision: medium
- exclude:
id:
- js/angular/disabling-sce
- js/angular/insecure-url-allowlist
Tip
Configuratiebestandspecificaties negeren en hebben voorrang op configuraties op pijplijnniveau voor de AdvancedSecurity-Codeql-Init@1
taak.
includepaths
/ ignorepaths
wordt genegeerd of, indien paths
/paths-ignore
aanwezig, overschreven met waarden van .paths
/paths-ignore
querysuite
wordt overschreven met waarden die zijn opgegeven in queries
of packs
in het configuratiebestand.
Als u een aangepaste query gebruikt, ziet u hier een voorbeeld qlpack.yml
in de map met uw aangepaste query's:
version: 1.0.1
dependencies:
codeql/javascript-all: "*"
codeql/javascript-queries: "*"
De dependencies
variabele bevat alle afhankelijkheden van dit pakket en hun compatibele versiebereiken. Naar elke afhankelijkheid wordt verwezen als het scope/name
codeQL-bibliotheekpakket. Bij het definiëren dependencies
is uw qlpack.yml
afhankelijk van precies een van de kerntaalpakketten (bijvoorbeeld JavaScript, C#, Ruby, enzovoort), die bepaalt welke taal uw query kan analyseren.
Zie CodeQL-pakketstructuur aanpassen voor meer qlpack.yml
specifieke advies- en configuratieopties voor uw configuratiebestand.
Zodra u uw configuratiebestand hebt, moet u de pijplijn waarop CodeQL-analyse wordt uitgevoerd aanpassen om uw nieuwe bestand te kunnen gebruiken. Hier volgt een voorbeeldpijplijn die verwijst naar een configuratiebestand:
trigger: none
pool:
vmImage: windows-latest
# You can either specify your CodeQL variables in a variable block...
variables:
# `configfilepath` must be an absolute file path relative to the repository root
advancedsecurity.codeql.configfilepath: '$(build.sourcesDirectory)/.pipelines/steps/configfile.yml'
# Or you can specify variables as variables for the task. You do not need both definitions.
steps:
- task: AdvancedSecurity-Codeql-Init@1
displayName: Initialize CodeQL
inputs:
languages: 'javascript'
loglevel: '2'
configfilepath: '$(build.sourcesDirectory)/.pipelines/steps/configfile.yml'
# If downloading a pack from GitHub,
# you must include a GitHub access token with the scope of `read:packages`.
env:
GITHUB_TOKEN: $(githubtoken)
- task: AdvancedSecurity-Codeql-Analyze@1
displayName: Perform CodeQL Analysis