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

1. 📖 Introduzione

194a7f6f1a93b614.png

In questo codelab, imparerai le nozioni di base di Gemini CLI 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).

3a143645e891087.png

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

59e03077d1ba2039.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.

973396bb9d9c3523.png

837e03fb7edafdc4.png

Se vedi "Account di fatturazione della 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

7f607aa026552bf5.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.

1829c3759227c19b.png

b8fe7df5c3c2b919.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).

Successivamente, dobbiamo anche 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 della shell attiva.

25e65d7ad1d62de0.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>

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

Fai clic sul pulsante Apri editor per aprire un editor di Cloud Shell b16d56e4979ec951.png.

Ora vedrai l'interfaccia di Cloud Shell Editor come mostrato di seguito

74e9e030342164b6.png

Ora clona il repository demo con cui interagirai. Innanzitutto, dobbiamo aprire il terminale per l'editor. Puoi farlo facendo clic su Terminale -> Nuovo terminale nella barra dei menu oppure utilizzando Ctrl + Maiusc + C. Si aprirà una finestra del terminale nella parte inferiore del browser.

95e31ec63a88890d.png

Poi esegui questo comando nel terminale

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

Dopodiché, vai alla sezione superiore dell'editor di Cloud Shell e fai clic su File->Apri cartella, individua la directory username e la directory del repository clonato code-analysis-demo, quindi fai clic sul pulsante OK. In questo modo, la directory scelta diventerà la directory di lavoro principale. In questo esempio, il nome utente è alvinprayuda, quindi il percorso della directory è mostrato di seguito

ee00d484ff2f8351.png

194f63ef6de51b9.png

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

2d53c6161b553e68.png

Ora possiamo passare alla fase successiva.

3. 🚀 Installazione e configurazioni

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. Attiva 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

7f0f7d5091df7abb.png

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

7ce5c6574f249304.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"
    }
  }
}

72300c1f781857c8.png

4. 🚀 Comandi di base e strumenti integrati

Ora, proviamo l'interfaccia a riga di comando di Gemini per saperne di più. Se stai cercando un comando di base che puoi utilizzare, digita /help per visualizzare tutti i comandi disponibili.

800d1b06a5ad9f9c.png

/help

Vedrai un output simile a questo: f46a75c6bb177a2b.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.

17a6d7fcf06df563.png

/tools

Verrà visualizzato un output simile al seguente:

7d22b38a387f45d0.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

15e2d863a4eb8df4.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

8163f43b05ca59a3.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

6da12f33463ac755.png

Installazione delle 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.

Installare le 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.

88a86a0dc42fc510.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.

e3fcf630238f9b2e.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

10d6ad2ef91b5acf.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:

543035cb65d27804.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 tutte queste procedure di scansione della sicurezza

73f4966870bc9ddf.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.

a0af5e15627afa83.png

Quindi, chiedi a Gemini CLI di continuare.

611a7ed0fb6fc44b.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

b4cbad3aaeaa8dce.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 dover 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 dobbiamo aggiungere il flag --yolo per approvare automaticamente tutte le azioni, il che significa abilitare tutti gli strumenti durante la modalità non interattiva

Eseguiamo l'estensione code-review con questo 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. Nota il flag -e qui, che 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 esaminato 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 e origini dati esterni utilizzando i server MCP come ponti per l'ambiente locale e servizi esterni come le API.

5f1cdd4be3e7b42a.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

Configurazione del 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.

dc57f047ca9a2b83.png

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

59d9b700c41ca1b6.png

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

e96fccd80872e480.png

30ac727da307602b.png

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

ad167223fa231e3c.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.

efd82711868093c0.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.

a97c9a98f07dc87c.png

/mcp

Quindi, per testare questa connessione MCP, invia questo comando

59bfd79aba7cc386.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.

864b859b56cfe9e7.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

ad2a8e8d0a15e3f5.png

3cb40f104ce6a594.png

8edb7277fa6324b.png

ef48414c02a16dfa.png

10. 💡 Esplora altre estensioni di Gemini CLI

8a7939ee0328e6e2.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.