Usando consultas personalizadas com o CodeQL
Por padrão, se você não tiver um arquivo de configuração personalizado especificado na configuração do pipeline, o CodeQL executará o security-extended
pacote de consultas para analisar seu código. Você pode utilizar consultas CodeQL personalizadas para escrever suas próprias consultas para encontrar vulnerabilidades e erros específicos. Você também precisa criar um arquivo de configuração personalizado para modificar a análise padrão do CodeQL.
Para localizar consultas personalizadas existentes ou contribuir com sua própria consulta personalizada, consulte Contribuindo para o CodeQL.
Análise com consultas personalizadas
A maneira mais rápida de começar com uma consulta personalizada é escrever uma consulta e salvá-la em seu repositório local do Azure DevOps. Você pode personalizar os detalhes de uma consulta personalizada de acordo com sua necessidade, mas ela deve ter pelo menos um ID de regra. Para obter mais informações sobre como escrever sua própria consulta CodeQL, consulte Escrevendo consultas CodeQL. Você também pode agrupar várias consultas em um pacote de consultas ou utilizar pacotes publicados por outras pessoas. Para obter mais informações, consulte Publicando e usando pacotes CodeQL.
Usando um arquivo de configuração personalizado
Um arquivo de configuração personalizado é uma maneira de gerenciar quais consultas são executadas durante a análise do CodeQL em relação ao seu código. Você pode especificar mais consultas ou pacotes de consultas a serem executados e alterar ou desabilitar as consultas CodeQL padrão.
Para incluir uma consulta específica que você deseja incluir, especifique a consulta com um nome e um caminho para o local do arquivo de consulta (.ql) em seu repositório.
Para incluir um pacote específico que você deseja incluir, especifique o nome do pacote. Você pode especificar qualquer número de pacotes de consulta CodeQL para executar em seu arquivo de configuração.
O próximo passo é criar um qlpack.yml
arquivo. Este arquivo declara o pacote CodeQL e informações sobre ele. Todos os *.ql
arquivos no mesmo diretório (ou subdiretório) como um qlpack.yml
são considerados parte do pacote.
Gorjeta
O packs
filtro do ficheiro de configuração suporta a transferência de pacotes de repositórios alojados no GitHub, embora o queries
filtro não o faça.
Se o pacote for privado no GitHub, você precisará fornecer um token de acesso do GitHub por meio da AdvancedSecurity-Codeql-Init@1
tarefa como uma variável de ambiente e o nome da variável como GITHUB_TOKEN
, com o escopo do token sendo read:packages
.
Aqui está um exemplo de arquivo de configuração:
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
Gorjeta
As especificações do arquivo de configuração ignoram e têm precedência sobre as configurações no nível do pipeline para a AdvancedSecurity-Codeql-Init@1
tarefa.
includepaths
/ ignorepaths
serão ignorados ou, se paths
/paths-ignore
estiverem presentes, substituídos por valores de .paths
/paths-ignore
querysuite
será substituído por valores especificados no queries
arquivo de configuração ou packs
no arquivo de configuração.
Se você estiver usando qualquer consulta personalizada, aqui está um exemplo qlpack.yml
colocado no diretório de suas consultas personalizadas:
version: 1.0.1
dependencies:
codeql/javascript-all: "*"
codeql/javascript-queries: "*"
A dependencies
variável contém todas as dependências deste pacote e seus intervalos de versões compatíveis. Cada dependência é referenciada como o scope/name
de um pacote de biblioteca CodeQL. Ao definir dependencies
o , você qlpack.yml
depende exatamente de um dos principais pacotes de idiomas (por exemplo, JavaScript, C#, Ruby, etc.), que determina a linguagem que sua consulta pode analisar.
Para obter conselhos mais específicos e opções de configuração com seu arquivo de configuração, consulte Personalizando sua configuração avançada para verificação de código ou para qlpack.yml
configuração, consulte Estrutura do pacote CodeQL.
Depois de ter seu arquivo de configuração, você precisa personalizar seu pipeline executando a análise CodeQL para utilizar seu novo arquivo. Aqui está um pipeline de exemplo apontando para um arquivo de configuração:
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