Szybki start: tworzenie przepływu pracy skanowania zabezpieczeń w usłudze GitHub

W tym przewodniku Szybki start dowiesz się, jak utworzyć przepływ pracy usługi GitHub CodeQL w celu zautomatyzowania odnajdywania luk w zabezpieczeniach w bazie kodu platformy .NET.

W języku CodeQL kod jest traktowany jako dane. Luki w zabezpieczeniach, błędy i inne błędy są modelowane jako zapytania, które można wykonywać względem baz danych wyodrębnionych z kodu.

Wymagania wstępne

  • Konto usługi GitHub.
  • Repozytorium kodu źródłowego platformy .NET.

Tworzenie pliku przepływu pracy

W repozytorium GitHub dodaj nowy plik YAML do katalogu .github/workflows . Wybierz zrozumiałą nazwę pliku, co wyraźnie wskaże, co ma zrobić przepływ pracy. Aby uzyskać więcej informacji, zobacz Plik przepływu pracy.

Ważne

Usługa GitHub wymaga, aby pliki kompozycji przepływu pracy zostały umieszczone w katalogu .github/workflows .

Pliki przepływu pracy zwykle definiują kompozycję co najmniej jednej akcji usługi GitHub za pośrednictwem elementu jobs.<job_id>/steps[*]. Aby uzyskać więcej informacji, zobacz Składnia przepływu pracy dla funkcji GitHub Actions.

Utwórz nowy plik o nazwie codeql-analysis.yml, skopiuj i wklej do niego następującą zawartość YML:

name: "CodeQL"

on:
  push:
    branches: [main]
    paths:
    - '**.cs'
    - '**.csproj'
  pull_request:
    branches: [main]
    paths:
    - '**.cs'
    - '**.csproj'
  schedule:
    - cron: '0 8 * * 4'

jobs:
  analyze:

    name: analyze
    runs-on: ubuntu-latest

    strategy:
      fail-fast: false
      matrix:
        language: ['csharp']

    steps:
    - name: Checkout repository
      uses: actions/checkout@v3
      with:
        fetch-depth: 2

    - run: git checkout HEAD^2
      if: ${{ github.event_name == 'pull_request' }}

    - name: Initialize CodeQL
      uses: github/codeql-action/init@v1
      with:
        languages: ${{ matrix.language }}

    - name: Autobuild
      uses: github/codeql-action/autobuild@v1

    - name: Perform CodeQL Analysis
      uses: github/codeql-action/analyze@v1

W poprzedniej kompozycji przepływu pracy:

  • Definiuje name: CodeQL nazwę "CodeQL" będzie wyświetlana w znaczkach stanu przepływu pracy.

    name: "CodeQL"
    
  • Węzeł on oznacza zdarzenia, które wyzwalają przepływ pracy:

    on:
      push:
        branches: [main]
        paths:
        - '**.cs'
        - '**.csproj'
      pull_request:
        branches: [main]
        paths:
        - '**.cs'
        - '**.csproj'
      schedule:
        - cron: '0 8 * * 4'
    
    • Wyzwalany, gdy element push lub występuje w main gałęzi, w której wszystkie pliki uległy zmianie kończące się rozszerzeniami plików .cs lub csprojpull_request.
    • Jako zadanie cron (zgodnie z harmonogramem) — do uruchomienia o 8:00 UTC co czwartek.
  • Węzeł jobs tworzy kroki, które należy wykonać przez przepływ pracy.

    jobs:
      analyze:
    
        name: analyze
        runs-on: ubuntu-latest
    
        strategy:
          fail-fast: false
          matrix:
            language: ['csharp']
    
        steps:
        - name: Checkout repository
          uses: actions/checkout@v3
          with:
            fetch-depth: 2
    
        - run: git checkout HEAD^2
          if: ${{ github.event_name == 'pull_request' }}
    
        - name: Initialize CodeQL
          uses: github/codeql-action/init@v1
          with:
            languages: ${{ matrix.language }}
    
        - name: Autobuild
          uses: github/codeql-action/autobuild@v1
    
        - name: Perform CodeQL Analysis
          uses: github/codeql-action/analyze@v1
    
    • Istnieje jedno zadanie o nazwie analyze , które zostanie uruchomione w najnowszej wersji systemu Ubuntu.
    • Element strategy definiuje język C# jako .language
    • Akcja github/codeql-action/init@v1 usługi GitHub służy do inicjowania koduQL.
    • Akcja github/codeql-action/autobuild@v1 usługi GitHub kompiluje projekt .NET.
    • Akcja github/codeql-action/analyze@v1 usługi GitHub wykonuje analizę CodeQL.

Aby uzyskać więcej informacji, zobacz GitHub Actions: Konfigurowanie skanowania kodu.

Znaczek Tworzenie stanu przepływu pracy

Popularną nomenklaturą repozytoriów GitHub jest posiadanie pliku README.md w katalogu głównym katalogu repozytorium. Podobnie warto zgłosić najnowszy stan dla różnych przepływów pracy. Wszystkie przepływy pracy mogą wygenerować wskaźnik stanu, który jest wizualnie atrakcyjny w pliku README.md . Aby dodać wskaźnik stanu przepływu pracy:

  1. W repozytorium GitHub wybierz opcję nawigacji Akcje .

  2. Wszystkie przepływy pracy repozytorium są wyświetlane po lewej stronie, wybierz żądany przepływ pracy i przycisk wielokropka (...).

    • Przycisk wielokropka (...) rozwija opcje menu dla wybranego przepływu pracy.
  3. Wybierz opcję menu Znaczek Utwórz stan.

    GitHub: Create status badge

  4. Wybierz przycisk Znaczek Stan kopiowania markdown .

    GitHub: Copy status badge Markdown

  5. Wklej znacznik Markdown do pliku README.md , zapisz plik, zatwierdź i wypchnij zmiany.

Aby uzyskać więcej informacji, zobacz Dodawanie wskaźnika stanu przepływu pracy.

Przykładowy wskaźnik stanu przepływu pracy CodeQL

Zaliczone Niepowodzenie Brak stanu
GitHub: CodeQL passing badge GitHub: CodeQL failing badge GitHub: CodeQL no-status badge

Zobacz też

Następne kroki