Revisione del codice e analisi della sicurezza con l'interfaccia a riga di comando di Gemini con estensioni

1. 📖 Introduzione

838a11ffed94b79e.png

In questo codelab, imparerai le nozioni di base della CLI Gemini e utilizzerai la sua estensione di revisione del codice e analisi della sicurezza nel tuo flusso di lavoro di sviluppo software.

Cosa imparerai a fare

  • Come configurare Gemini CLI
  • Come configurare Gemini CLI
  • Come installare l'estensione Gemini CLI
  • Come utilizzare l'estensione Gemini CLI per la revisione del codice e l'analisi della sicurezza
  • Come configurare MCP per l'interfaccia a riga di comando di Gemini
  • Come ispezionare Gemini CLI in CI/CD

Che cosa ti serve

  • Browser web Chrome
  • Un account Gmail
  • Un progetto cloud con un account di fatturazione abilitato

2. 🚀 Preparazione della configurazione di sviluppo del workshop

Passaggio 1: seleziona Progetto attivo nella console Cloud

Nella console Google Cloud, nella pagina di selezione del progetto, seleziona o crea un progetto Google Cloud (vedi la sezione in alto a sinistra della console).

6da543936f051b95.png

Fai clic e vedrai l'elenco di tutti i tuoi progetti, come in questo esempio:

3c3963e0fbb5ba4f.png

Il valore indicato dal riquadro rosso è l'ID PROGETTO e verrà utilizzato in tutto il tutorial.

Verifica che la fatturazione sia attivata per il tuo progetto Cloud. Per verificarlo, fai clic sull'icona a forma di hamburger ☰ nella barra in alto a sinistra, che mostra il menu di navigazione, e trova il menu Fatturazione.

3291845833270d7f.png

ddf6f055d710f7a9.png

Se vedi "Account di fatturazione di prova di Google Cloud Platform" sotto il titolo Fatturazione / Panoramica ( sezione in alto a sinistra della console cloud ), il tuo progetto è pronto per essere utilizzato per questo tutorial. In caso contrario, torna all'inizio di questo tutorial e riscatta l'account di fatturazione di prova

45539d4ac57dd995.png

Passaggio 2: acquisisci familiarità con Cloud Shell

Utilizzerai Cloud Shell per la maggior parte dei tutorial. Fai clic su Attiva Cloud Shell nella parte superiore della console Google Cloud. Se ti viene chiesto di autorizzare, fai clic su Autorizza.

26f20e837ff06119.png

79b06cc89a99f840.png

Una volta connesso a Cloud Shell, dobbiamo verificare se la shell ( o il terminale) è già autenticata con il nostro account

gcloud auth list

Se vedi il tuo Gmail personale come nell'esempio di output riportato di seguito, va tutto bene.

Credentialed Accounts

ACTIVE: *
ACCOUNT: alvinprayuda@gmail.com

To set the active account, run:
    $ gcloud config set account `ACCOUNT`

In caso contrario, prova ad aggiornare il browser e assicurati di fare clic su Autorizza quando richiesto ( l'operazione potrebbe essere interrotta a causa di un problema di connessione).

Passaggio 3: familiarizza con l'editor di Cloud Shell e configura la directory di lavoro dell'applicazione

Ora possiamo configurare l'editor di codice per svolgere alcune attività di programmazione. Per questo utilizzeremo l'editor di Cloud Shell

Dobbiamo clonare il repository demo con cui interagiremo. Esegui questo comando sul terminale per clonare il repository e aprire l'editor di Cloud Shell

git clone https://github.com/alphinside/gemini-cli-code-analysis-demo.git code-analysis-demo && cloudshell ws code-analysis-demo

Ora, la directory di lavoro dell'editor di Cloud Shell dovrebbe avere il seguente aspetto:

3a72d901f5e78fcf.png

Successivamente, dobbiamo verificare se la shell è già configurata con l'ID PROGETTO corretto. Se vedi un valore tra parentesi prima dell'icona $ nel terminale (nella schermata riportata di seguito, il valore è "your-workshop-project"), questo valore mostra il progetto configurato per la sessione shell attiva.

8785d925a094c260.png

Se il valore mostrato è già corretto, puoi saltare il comando successivo. Tuttavia, se non è corretto o è mancante, esegui il seguente comando

gcloud config set project <YOUR_PROJECT_ID>

Ora possiamo passare alla fase successiva.

3. 🚀 Configurazione

Se vuoi installare Gemini CLI nel tuo sistema locale, puoi seguire questi passaggi:

  1. Assicurati che il tuo sistema abbia Node versione 20 o successive.
  2. Abilita Gemini CLI in uno dei seguenti modi:
  • Installarlo come pacchetto globale
# Install as an executor

npm install -g @google/gemini-cli

# then run it from terminal
gemini
  • In alternativa, eseguilo direttamente dall'origine per ottenere sempre l'ultima versione.
npx https://github.com/google-gemini/gemini-cli

Quando lo esegui per la prima volta, ti verranno poste diverse domande. Se lo esegui da un IDE (ad es. VSCode), ti verrà posta la seguente domanda

91769e12a6214c89.png

Poi, ti verranno mostrate diverse opzioni per l'autenticazione.

61ba181d61e506dc.png

Esistono varie opzioni:

  • Se scegli Accedi con Google, si aprirà una pagina di autenticazione Google nel browser e dovrai solo accettarla.
  • Se preferisci utilizzare la chiave API Gemini, devi crearne una nella pagina di AI Studio e poi creare il file .env nella directory di lavoro con la variabile GEMINI_API_KEY impostata ( o esegui il comando export GEMINI_API_KEY="your-api-key" nella riga di comando).
  • Se scegli di utilizzare Vertex AI,avrai bisogno di un progetto come quello che hai configurato in precedenza e di creare il file .env e impostare GOOGLE_CLOUD_PROJECT e GOOGLE_CLOUD_LOCATION.

Se vuoi modificare questi metodi di autenticazione, puoi eseguire il comando /auth da Gemini CLI o modificare il file di configurazione. Se vuoi modificare direttamente il file di configurazione, su Linux dovrebbe trovarsi in $HOME/.gemini/settings.json . Vedrai il tipo security e auth e potrai modificarlo.

{
  "security": {
    "auth": {
      "selectedType": "vertex-ai" # or "gemini-api-key" or "oauth-personal"
    }
  }
}

2b894cdf68057d6a.png

4. 🚀 Comandi di base e strumenti integrati

Ora, proviamo a usare la CLI di Gemini per saperne di più. Esegui questo comando nel terminale per accedere a Gemini CLI

gemini

Se stai cercando un comando di base che puoi utilizzare, puoi digitare /help per visualizzare tutti i comandi disponibili.

d4776f0c740ad723.png

/help

Vedrai un output simile a questo: 290d620f3787b3d0.png

Gemini CLI è un agente AI, pertanto dispone di strumenti per risolvere l'attività assegnata dall'utente. Per visualizzare gli strumenti integrati, esegui il comando /tools.

7367214e26b0da86.png

/tools

Verrà visualizzato un output simile al seguente:

363ae783ae902fe4.png

Come puoi vedere, Gemini CLI ha diverse funzionalità, come la lettura e la scrittura su file, la ricerca web e molte altre. Per impostazione predefinita, molti di questi strumenti richiedono la conferma dell'utente a causa del potenziale rischio

Ora vediamo come funziona. Prova a eseguire questi prompt in Gemini CLI

be23caafc0184a6d.png

Find top 10 OWASP security issue and write it down to owasp.md

Vedrai che verrà richiamato lo strumento GoogleSearch e in un secondo momento verrà scritto il risultato utilizzando WriteFile. Se utilizzi un IDE, vedrai che verrà presentato come una differenza e un'opzione di visualizzazione per accettare o rifiutare i suggerimenti. Qui puoi vedere che Gemini CLI ti chiede l'autorizzazione per scrivere il file

724bc8144b51752e.png

5. 🚀 Estensioni

Per migliorare l'output di un'attività specifica con un agente AI, le cose difficili sono come creare un prompt adeguato, gestire un'ingegneria del contesto adeguata con l'integrazione di strumenti adeguati e così via.

Le estensioni Gemini CLI sono prompt e integrazioni preconfigurati e facilmente installabili che possono connettersi a strumenti esterni. Ogni estensione contiene un "playbook" integrato su come utilizzare gli strumenti in modo efficace e può essere composto dai seguenti componenti:

  • Comandi slash personalizzati
  • Configurazioni MCP
  • File di contesto

cfe24ebe1dfb0152.png

Installare le estensioni di sicurezza

Ad esempio, in questo tutorial esploreremo come installare le estensioni code-review e security.

Esegui questo comando per installare le estensioni security dal terminale

gemini extensions install https://github.com/gemini-cli-extensions/security

Verranno visualizzate le seguenti domande. Premi Invio per accettare.

Installing extension "gemini-cli-security".
**Extensions may introduce unexpected behavior. Ensure you have investigated the extension source and trust the author.**
This extension will run the following MCP servers:
  * securityServer (local): node /home/alvinprayuda/.gemini/extensions/gemini-cli-security/mcp-server/dist/security.js
This extension will append info to your gemini.md context using GEMINI.md
Do you want to continue? [Y/n]:
Extension "gemini-cli-security" installed successfully and enabled.

Installazione delle estensioni di revisione del codice

Successivamente, installa l'estensione code-review eseguendo il comando riportato di seguito.

gemini extensions install https://github.com/gemini-cli-extensions/code-review

Al termine, esegui di nuovo la CLI Gemini

gemini

ed esegui il comando /extensions, vedrai che queste due estensioni sono già installate.

571556bdc2b3e914.png

/extensions

Bene, ora eseguiamo un'esecuzione pratica sul repository di esempio che hai clonato in precedenza

6. 🚀 Modalità interattiva - Estensione dell'applicazione di analisi della sicurezza del codice

L'estensione Security è un'estensione open source di Gemini CLI, creata per migliorare la sicurezza del repository. L'estensione aggiunge un nuovo comando all'interfaccia a riga di comando di Gemini che analizza le modifiche al codice per identificare una serie di rischi e vulnerabilità per la sicurezza.

Ora prepariamo prima il repository demo. Esegui il comando seguente per passare al ramo in cui sono già state applicate le modifiche con rischio per la sicurezza

git checkout refactor/analysis-demo

Dopodiché, esegui Gemini CLI nel terminale

gemini

Quindi eseguiamo le estensioni.

aab23afb4f4bfb3.png

/security:analyze

Verrà avviato un processo a lunga esecuzione e durante il processo riceverai diverse interruzioni che ti chiederanno l'autorizzazione per eseguire operazioni specifiche come mkdir, come mostrato di seguito

f889f7aca882f87d.png

Si tratta di un meccanismo di protezione per garantire che gli utenti siano consapevoli di ciò che verrà eseguito da Gemini CLI. Per il resto del tutorial, puoi sempre consentirlo ( opzione 2).

Questa estensione richiamerà un processo a esecuzione prolungata. Puoi vedere che crea un file di pianificazione all'interno della directory .gemini_security e puoi vedere l'elenco di controllo dei processi completati o meno. Come mostrato in questo esempio:

bf7f9e885f15ff89.png

Ci vorrà un po' di tempo per completare le attività. Nel frattempo, possiamo controllare l'origine di queste estensioni nel repository GitHub. Questo URL mostra il prompt utilizzato per eseguire tutti questi processi di scansione della sicurezza

e5592755fcdf5a64.png

Come puoi vedere, per eseguire questa scansione del prompt come Gemini CLI per eseguire il controllo in due passaggi, il passaggio di ricognizione e il passaggio di indagine più dettagliato.

Se visualizzi il seguente prompt in Gemini CLI, puoi scegliere l'opzione 2 per disattivare il rilevamento dei loop.

74426d4ae8fae006.png

Quindi, chiedi a Gemini CLI di continuare.

3ea7391ccbf2b872.png

continue

Si tratta di un meccanismo per evitare loop infiniti di chiamate di strumenti non produttive e continuerà a essere migliorato nel tempo.

Al termine, il report verrà visualizzato sul terminale interattivo. Per semplificare la procedura, chiediamo a Gemini CLI di scriverlo in security-analysis.md

86fcc1c406100224.png

write the result to security-analysis.md file

Ora puoi esaminare il risultato scritto nel file

7. 🚀 Modalità non interattiva - Applicazione dell'estensione di revisione del codice

L'estensione code-review aggiunge un nuovo comando all'interfaccia a riga di comando di Gemini che analizza le modifiche al codice per identificare una serie di problemi di qualità del codice.

Questa estensione può essere eseguita in modalità non interattiva di Gemini CLI, il che significa che l'intero processo può essere eseguito senza la necessità di accedere alla shell di Gemini CLI. Per eseguire Gemini CLI in modalità non interattiva, puoi utilizzare il seguente pattern di comando

gemini "put your command here"

Tuttavia, è importante notare che l'esecuzione in modalità non interattiva disabilita qualsiasi operazione degli strumenti che richiede l'autorizzazione dell'utente, pertanto è necessario aggiungere il flag --yolo per approvare automaticamente tutte le azioni, il che significa abilitare tutti gli strumenti durante la modalità non interattiva

Se esegui questo flag yolo in Cloud Shell, la configurazione predefinita del sistema ti impedirà di eseguirlo e mostrerà questo messaggio di errore

Cannot start in YOLO mode when it is disabled by settings

Esegui questo comando per impostare il file di configurazione a livello di workspace

mkdir .gemini && cloudshell edit .gemini/settings.json

Ora, il file settings.json verrà aperto nell'editor. Copia la seguente configurazione per consentire la modalità yolo.

{
    "security": {
        "disableYoloMode": false
    }
}

Ora eseguiamo l'estensione code-review con il seguente comando

gemini "/code-review" --yolo -e code-review > code-review.md

Questo comando scriverà il risultato dell'output di Gemini CLI nel file code-review.md. Prendi nota del flag -e qui, questo flag controlla quale estensione attivare durante la sessione. Qui attiviamo solo l'estensione code-review e disattiviamo le altre.

Ci vorrà un po' di tempo, ma al termine potrai visualizzare un risultato simile a quello mostrato di seguito scritto nel file Markdown

Here are the results of the code review.

While the recent changes to rename `get_products` and `get_product` to `GetProducts` and `GetProduct` are minor, the codebase has some inconsistencies in its naming conventions. For instance, other functions like `create_product` use `snake_case`, while the newly renamed functions use `PascalCase`. For better code quality and readability, I recommend using a consistent naming convention throughout the project.

More importantly, I have identified several security vulnerabilities in the `main.py` file. Here is a summary of the findings:

### 1. SQL Injection
*   **Severity**: High
*   **Location**: 
    *   `main.py:99` in `get_products_by_category`
    *   `main.py:146` in `search_products`
    *   `main.py:372` in `get_user_transactions`
    *   `main.py:438` in `adjust_inventory_by_query`
*   **Description**: The endpoints directly use f-strings to construct SQL queries, making them vulnerable to SQL injection attacks. An attacker could manipulate the input to execute arbitrary SQL commands, potentially leading to data breaches or unauthorized modifications.
*   **Recommendation**: Use parameterized queries or an ORM to handle database interactions. This will ensure that user input is properly sanitized and prevent SQL injection attacks.

### 2. Server-Side Request Forgery (SSRF)
*   **Severity**: High
*   **Location**: `main.py:265` in `fetch_url`
*   **Description**: The `fetch_url` endpoint allows users to specify an arbitrary URL, which the server then requests. This can be exploited to make requests to internal services or local files, leading to information disclosure or other security breaches.
*   **Recommendation**: Implement a whitelist of allowed domains or protocols to restrict the URLs that can be requested. Additionally, you can disable redirects and use a timeout to limit the impact of an attack.

### 3. Information Exposure
*   **Severity**: Medium
*   **Location**: `main.py:423` in `get_environment_variables`
*   **Description**: The `get_environment_variables` endpoint exposes all environment variables to the user. This can include sensitive information such as API keys, database credentials, and other secrets.
*   **Recommendation**: Remove this endpoint or restrict access to it to authorized users. If you need to expose some environment variables, do so selectively and avoid exposing sensitive information.

8. 🚀 Supporto del Model Context Protocol

Ora, come abbiamo visto in precedenza nelle spiegazioni delle estensioni, la CLI Gemini può connettersi ai server MCP, ovvero applicazioni che forniscono strumenti e risorse tramite il Model Context Protocol. Questa connessione consente alla CLI Gemini di interagire con sistemi esterni e origini dati utilizzando i server MCP come ponti per l'ambiente locale e servizi esterni come le API.

7d8738ee9c079aa1.png

Se vuoi configurare il tuo server MCP, devi modificare il file .gemini/settings.json e aggiungere le seguenti configurazioni :

{
    ...
    # Previous settings above if any
    "mcpServers": {
       "server_name": {
           # MCP server configurations here
       }
    }
}

Per questo tutorial, configuriamo la connessione con il nostro account GitHub per trasferire i dati del report precedente in GitHub

Configurare il server MCP di GitHub

Innanzitutto, creiamo il file di configurazione del progetto Gemini CLI. Esegui questo comando

mkdir -p .gemini && touch .gemini/settings.json

Poi apri il file .gemini/settings.json e compilalo con la seguente configurazione

{
  "mcpServers": {
       "github": {
            "httpUrl": "https://api.githubcopilot.com/mcp/",
            "headers": {
                "Authorization": "your-personal-access-token"
            },
            "timeout": 5000
       }
  }
}

Ora avremo bisogno del tuo token di accesso personale di GitHub, quindi assicurati di avere già un account GitHub.

Accedi a GitHub e vai a Impostazioni.

c7d83d4e503602e2.png

Dopodiché, scorri verso il basso per trovare le Impostazioni sviluppatore e fai clic.

c6c9bfafe5021b9e.png

poi seleziona Token di accesso personali e scegli Token (classico).

e21f0ed9f361fc13.png

c3c26d7f41c51e1c.png

Inserisci qui il nome del tuo token di accesso personale e controlla gli ambiti repo.

b0830480eaf3c15d.png

Quindi scorri verso il basso e fai clic sul pulsante Genera token. Assicurati di

Fai clic sul pulsante Genera nuovo token e seleziona Genera nuovo token (classico). Dopodiché, copia il token generato e scrivilo nel file .gemini/settings.json.

30d1ea92bb24a7ba.png

Pertanto, il file .gemini/settings.json dovrebbe essere simile all'esempio seguente

{
  "mcpServers": {
       "github": {
            "httpUrl": "https://api.githubcopilot.com/mcp/",
            "headers": {
                "Authorization": "ghp-xxxx"
            },
            "timeout": 5000
       }
  }
}

Ora verifichiamo la connessione. Inserisci Gemini CLI eseguendo questo comando

gemini

Quindi, esegui il comando /mcp. Dovresti visualizzare la MCP di GitHub già configurata correttamente.

1e9c8585ecb39ccb.png

/mcp

Quindi, per testare questa connessione MCP, invia questo comando

70e045049e8792a8.png

Aggregate the findings from @code-review.md and @security-analysis.md into a single report and ensure no duplicates issues reported. Post this report as a comment on the relevant pull request for the current git branch on GitHub and display the pull request URL for manual review

Prendi nota della notazione @code-review.md e @security-analysis.md, che indica come fare riferimento ai file da passare a Gemini CLI. Questo comando leggerà i contenuti di entrambi i file e invierà un commento alla richiesta di pull relativa a questo ramo utilizzando la connessione Github MCP. Dopodiché, puoi controllare l'URL della richiesta di pull per verificarlo.

f6483c19e27d4d1c.png

9. 💡 Gemini CLI nel workflow CI/CD

Se sei un utente GitHub, puoi incorporare facilmente Gemini CLI nella tua pipeline CI/CD utilizzando run-gemini-cli GitHub Action. Funge sia da agente autonomo per le attività di codifica di routine critiche sia da collaboratore on demand a cui puoi delegare rapidamente il lavoro.

Puoi utilizzarlo per eseguire revisioni delle richieste di pull, assegnare priorità ai problemi, eseguire analisi e modifiche del codice e altro ancora utilizzando Gemini in modo conversazionale direttamente all'interno dei repository GitHub

L'esempio di questa integrazione può essere esaminato in questa pull request, in cui utilizziamo l'estensione di sicurezza Gemini CLI all'interno del runner e forniamo le revisioni quando viene creata la pull request

bc58be84fcbb313a.png

da9e2cde49cbebe5.png

3deda99e8a7fa4d3.png

d933d6b31b42e582.png

10. 💡 Esplora altre estensioni Gemini CLI

dd25e5619e91ad0b.png

Puoi anche esplorare altre estensioni all'indirizzo https://geminicli.com/extensions . Dai un'occhiata per scoprire altri strumenti interessanti.

11. 🧹 Esegui la pulizia

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo codelab, segui questi passaggi:

  1. Nella console Google Cloud, vai alla pagina Gestisci risorse.
  2. Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID progetto, quindi fai clic su Chiudi per eliminare il progetto.