Modalità di ricerca di CodeMender

CodeMender fornisce tre modalità di scansione distinte tramite il comando cm find. Ogni modalità è progettata per una fase specifica del ciclo di vita dello sviluppo software, bilanciando velocità, ambito e profondità.

Confrontare le modalità di ricerca

La seguente tabella confronta le tre modalità di scansione cm find:

Modalità Comando Ambito di destinazione Runtime tipico Ideale per
Scansione standard cm find PATH Directory specificata Runtime moderato Individuazione di sviluppatori locali, controlli rapidi, revisioni esplorative
Scansione diff cm find PATH --diff[=REF] File modificati più file dipendenti (ad esempio chiamanti e chiamati) Runtime rapido Pipeline CI/CD per richieste di pull (GitHub Actions, Cloud Build), pre-commit hooks
Scansione approfondita cm find PATH --deep Repository completo Runtime più lungo Controlli pianificati, preparazione alla release, certificazioni di conformità (SOC 2, ISO)

Scansione standard (predefinita)

Una scansione standard è la modalità predefinita quando esegui cm find senza fornire flag di scansione aggiuntivi. Esegue una scansione autonoma di una singola sessione della directory di destinazione specificata. Durante la scansione, CodeMender rileva i file di origine, li assegna in base ai pattern di vulnerabilità, esegue un'analisi di sicurezza iniziale e segnala le potenziali vulnerabilità raggruppate per gravità e tipo.

I seguenti esempi mostrano come eseguire una scansione standard su una directory di destinazione:

# Scan a directory using the default model
cm find ./src

# Scan with a specific Gemini model
cm find ./src --model gemini-3.8-flash

Punti di forza

Una scansione standard funziona senza configurazione e senza flag o parametri aggiuntivi. Bilancia velocità e copertura con un runtime moderato e utilizza token e risorse di computing minimi, il che la rende conveniente per lo sviluppo quotidiano.

Compromessi e limitazioni

Una scansione standard ha un richiamo inferiore sui codebase di grandi dimensioni e potrebbe non esplorare tutti i file nei repository aziendali di grandi dimensioni e multi-pacchetto perché opera in un contesto di singola sessione. Inoltre, si concentra principalmente sui pattern locali all'interno dei singoli file, il che limita l'analisi tra pacchetti e potrebbe non rilevare le vulnerabilità che interessano pacchetti distanti.

Quando utilizzarlo

Utilizza una scansione standard nei seguenti scenari:

  • Esegui una scansione sulla tua macchina locale prima di eseguire il commit delle modifiche per ricevere un feedback rapido durante lo sviluppo locale.
  • Ispeziona un repository appena clonato o un piccolo progetto per una valutazione iniziale della sua postura di sicurezza.
  • Ispeziona una sottodirectory o un modulo specifico quando indaghi su un potenziale problema.

Scansione diff

Una scansione diff esegue l'analisi diff di Git per i flussi di lavoro delle richieste di pull e le pipeline CI/CD ispezionando i file modificati e aggiunti, concentrandosi sugli intervalli di righe esatti (diff hunk) che sono stati modificati. Oltre a ispezionare le righe modificate, esegue un'analisi dell'impatto per scoprire i file non modificati nel repository che chiamano, importano o dipendono dalle funzioni e dai simboli modificati. In questo modo, le modifiche che alterano i contratti o le firme delle funzioni in un file non introducono vulnerabilità nei file dipendenti.

Durante la scansione, CodeMender isola automaticamente le vulnerabilità preesistenti nel codice non modificato in modo che i problemi legacy non causino l'errore della scansione o blocchino la richiesta di pull. Quindi valuta i risultati in base al criterio --fail-on e genera l'output dei risultati in formato tabella, JSON o SARIF v2.1.0.

I seguenti esempi mostrano come eseguire una scansione diff rispetto alle modifiche della copia di lavoro, alle modifiche di cui è stato eseguito lo staging o a un branch di destinazione:

# Scan working copy changes versus HEAD
cm find . --diff

# Scan staged changes only (pre-commit)
cm find . --diff --staged

# Scan a pull request branch against the main branch in CI/CD
cm find . --diff=origin/main --format=sarif --output=results.sarif \
    --fail-on=CRITICAL,HIGH

Per le configurazioni delle pipeline end-to-end, vedi Integrare con CI/CD.

Punti di forza

Una scansione diff è veloce e deterministica e in genere termina in meno di 2 minuti per mantenere brevi i runtime delle pipeline CI/CD. A differenza degli scanner diff che ispezionano solo le righe modificate, --diff ispeziona le relazioni tra chiamanti e chiamati per rilevare regressioni di sicurezza e violazioni dei contratti tra file. Poiché sopprime i risultati nel codice non modificato, la scansione blocca solo le richieste di pull sui problemi introdotti o interessati dalle modifiche, evitando report rumorosi ed errori di build non necessari. Una scansione diff genera anche SARIF v2.1.0 per l'integrazione diretta nelle annotazioni di GitHub Code Scanning e nelle dashboard di Cloud Build.

Compromessi e limitazioni

Una scansione diff analizza solo il codice all'interno dell'area interessata della richiesta di pull e non rileva le vulnerabilità preesistenti nelle parti non modificate del repository. Richiede anche un repository Git con accesso al riferimento di base di destinazione.

Quando utilizzarlo

Utilizza una scansione diff nei seguenti scenari:

  • Esegui controlli automatici su ogni richiesta di pull nelle pipeline CI/CD come GitHub Actions, Cloud Build, GitLab CI o Jenkins.
  • Verifica che le modifiche locali siano pulite negli hook pre-commit o pre-push prima di eseguire il push del codice nel repository remoto.
  • Verifica che le unioni tra i branch di release non introducano regressioni.

Scansione approfondita

Una scansione approfondita è una modalità di scansione esaustiva progettata per controlli di sicurezza completi a livello di repository. Esegue il controllo dei file di origine in tutto il repository contemporaneamente utilizzando worker paralleli (configurati con --deep-workers, il cui valore predefinito è 8 e supporta un intervallo da 1 a 16). Quando rileva i risultati candidati, li convalida e li conferma rispetto al contesto del codice circostante per filtrare i falsi positivi prima di segnalare i risultati.

I seguenti esempi mostrano come eseguire una scansione approfondita in un repository:

# Run an exhaustive deep scan across the entire repository
cm find . --deep

# Tune concurrency and use the cyber-specialized security model
cm find . --deep --deep-workers=8 --model=gemini-3.8-flash-cyber

Punti di forza

Una scansione approfondita offre un richiamo elevato e una rilevazione completa delle vulnerabilità nei codebase aziendali di grandi dimensioni, superando le scansioni di singola sessione e utilizzando la verifica automatizzata per mantenere un'elevata precisione. Supporta più lingue ed è indipendente dalla piattaforma, funzionando in tutte le lingue supportate da Gemini senza richiedere compilatori, configurazioni di build o file di grammatica specifici per la lingua. Ottimizza anche l'utilizzo delle risorse concentrando l'analisi sul codice di produzione e riducendo al minimo il consumo di risorse di computing e token sui file non di produzione.

Compromessi e limitazioni

Non utilizzare una scansione approfondita come controllo sincrono che blocca le richieste di pull. Le scansioni approfondite eseguono un'analisi completa a livello di repository. Di conseguenza, richiedono un runtime più lungo e una spesa di token maggiore rispetto alle scansioni standard o diff.

Quando utilizzarlo

Utilizza una scansione approfondita nei seguenti scenari:

  • Esegui controlli di sicurezza pianificati con cadenza giornaliera o settimanale su tutti i repository di produzione.
  • Esegui un controllo di sicurezza completo pre-release prima delle release delle versioni principali o dei deployment di produzione.
  • Genera prove di controllo per le revisioni di conformità e certificazione SOC 2, ISO 27001, FedRAMP o PCI-DSS.
  • Stabilisci una baseline di sicurezza iniziale quando esegui l'onboarding di un nuovo codebase in CodeMender.

Scegliere una modalità di ricerca

Utilizza la seguente tabella di riferimento per selezionare la modalità di scansione adatta al tuo flusso di lavoro:

Flusso di lavoro o ambiente Caso d'uso e obiettivo Modalità consigliata Comando di esempio
Terminale locale Individuazione rapida o controllo di affidabilità su un modulo specifico Scansione standard cm find ./src
Terminale locale Controllo pre-commit sulle modifiche di cui è stato eseguito lo staging prima di eseguire il push Scansione diff cm find . --diff --staged
Pipeline CI/CD Gating automatico delle richieste di pull sul codice modificato e sui chiamanti Scansione diff cm find . --diff=origin/main --fail-on=CRITICAL,HIGH
Pipeline o controllo pianificato Controlli notturni, gate pre-release, conformità SOC 2 Scansione approfondita cm find . --deep --deep-workers=8

Riferimento ai flag dei comandi per modalità

Le tabelle seguenti descrivono i flag della riga di comando supportati da ogni modalità di scansione.

Flag comuni (tutte le modalità)

I seguenti flag si applicano a tutte le modalità di scansione cm find:

Flag Predefinito Descrizione
-c, --context TEXT "" Contesto aggiuntivo per guidare l'agente di scansione, ad esempio note sull'architettura.
--model MODEL_NAME gemini-3.8-flash Modello Gemini da utilizzare (gemini-3.8-flash, gemini-3.8-flash-cyber).
-y, --yes false Salta tutti i prompt di conferma interattivi.
--unrestricted false Disattiva la sandbox del file system.

Flag di scansione diff

I seguenti flag configurano le scansioni cm find --diff:

Flag Predefinito Descrizione
--diff[=REF] Off Attiva la modalità diff rispetto al riferimento di destinazione, ad esempio origin/main o HEAD~1. Senza REF, il confronto viene eseguito con HEAD. Non può essere utilizzato con --deep.
--staged Off Limita la diff all'indice di cui è stato eseguito lo staging (git diff --cached). Richiede --diff.
--diff-depth DEPTH 1 Profondità di attraversamento per l'analisi dell'impatto (da 1 a 3, valore predefinito: 1 hop).
--diff-workers COUNT 4 Numero di worker simultanei per i job di controllo delle richieste di pull (da 1 a 16).
--diff-max-neighbors COUNT 10 Numero massimo di file chiamanti o chiamati dipendenti da ispezionare.
--fail-on SEVERITIES CRITICAL,HIGH Gravità separate da virgole che causano cm find l'uscita con il codice 1.
--fail-on-truncation Off Esci con il codice 1 se l'individuazione dei vicini supera il limite.
--format FORMAT table Formato di output: table, json o sarif.
--output FILE Output standard Scrivi il report in un file anziché nell'output standard.

Flag di scansione approfondita

I seguenti flag configurano le scansioni cm find --deep:

Flag Predefinito Descrizione
--deep false Attiva la scansione approfondita esaustiva a livello di repository. Non può essere utilizzato con --diff.
--deep-workers COUNT 8 Numero di worker simultanei per la scansione approfondita (da 1 a 16).