requests.get, flask -request, modulo di richiesta flask

Request.get in Flask: il semplice vettore di iniezione che potresti perdere

Un controllo mancato che potrebbe costarti caro: Requests.get e modulo di richiesta Flask

Immagina questo: uno sviluppatore junior sta lavorando sotto pressione per rilasciare una funzionalità. Apre un'app Flask, aggiunge una nuova route, seleziona un parametro di query e va avanti.

A prima vista, questo utilizzo della richiesta Flask sembra corretto. Ma ometti tipo=int e tu apri la porta a attacchi di iniezione. Questi sono i tipi di rischi che sfuggono alle revisioni del codice perché "si tratta solo di recuperare un valore".

Dove si nasconde il rischio Frichiesta di richiesta and FModulo di richiesta lask

Entrambi i progetti editoriali di richiesta di fiaschetta and modulo di richiesta fiaschetta sono punti di ingresso non attendibili. Ogni valore che restituiscono proviene direttamente dal client e dovrebbe essere trattato come potenzialmente ostile.

La mancata convalida o sanificazione di questi dati può portare a problemi di sicurezza critici, tra cui:

Questi rischi non riguardano solo i database o il rendering front-end: gli aggressori possono sfruttare anche gli input utilizzati nei modelli o passati ai sottoprocessi.

Modelli di pseudo-codice sicuri:

preventivo CI/CD applicazione:

Anche se la sintassi sembra sicura, l'utilizzo di valori grezzi o non controllati nei modelli o nei comandi di sistema può diventare un serio vettore di iniezione.

Flusso di iniezione pratico (simulazione sicura)

Ecco come si sviluppa in genere un difetto di iniezione, utilizzando uno scenario fittizio e sicuro:

  1. Un utente invia un parametro di query creato appositamente all'applicazione.
  2. L'app legge il valore utilizzando richiesta.args.get() senza convalida.
  3. Tale valore viene concatenato direttamente in una query SQL, in una stringa modello o in un comando shell.
  4. Il sistema esegue tale logica, ignaro del contenuto iniettato.

Pseudo-codice (non sicuro, solo a scopo illustrativo):

Traccia del log fittizio:

Anche se questo esempio utilizza dei segnaposto, rispecchia come piccole sviste nella gestione degli input possano portare a vulnerabilità critiche.

I test automatici potrebbero non rilevare questo dato perché solitamente verificano tipi di input validi, non quelli malformati o dannosi.

Rischi nascosti nelle dipendenze utilizzando Richiesta di fiaschetta and Modulo di richiesta fiaschetta

Il tuo codice potrebbe essere pulito, ma i pacchetti di terze parti potrebbero comunque comprometterlo.
Alcuni plugin o librerie Flask richiamano internamente la richiesta Flask o il modulo di richiesta Flask senza convalida.

Esempio con pacchetti fittizi:

In CI/CD, gli aggiornamenti automatici delle dipendenze possono introdurre silenziosamente chiamate requests.get non sicure o modelli di gestione degli input vulnerabili.

Quanto è pericoloso Richiesta di fiaschetta L'utilizzo scivola oltre le revisioni del codice

In ambienti frenetici, piccoli ma pericolosi errori spesso passano inosservati, soprattutto quando il cambiamento sembra innocuo.

Esempio pull request differenza:

Commento del revisore:
"Sembra tutto a posto, sto solo ricevendo un parametro."

Questo tipo di svista è comune a causa di:

  • Distorsione cognitiva: i revisori possono presumere che request.args.get() sia sicuro per impostazione predefinita.
  • Pressione del tempo: i controlli di sicurezza passano in secondo piano quando si avvicinano le scadenze.
  • Diff familiarità: la modifica sembra di lieve entità, quindi non viene esaminata attentamente.

Senza regole chiare o un'applicazione automatizzata, questi rischi subdoli si insinuano nella produzione senza essere notati.

La prevenzione che funziona

Per mitigare i rischi di iniezione, combinare la convalida dell'input, la scansione automatizzata e la copertura dei test.

 Convalida dell'input con casting e whitelisting:

Il cast forza il valore a un tipo sicuro, mentre l'inserimento nella whitelist garantisce che vengano elaborati solo i valori ritenuti validi.

Test di sicurezza delle applicazioni statiche (SAST) in CI/CD:

Questo passaggio aiuta a rilevare i dati non convalidati richiesta.args.get() or richiesta.form.get() chiamate prima che raggiungano la produzione.

Test unitari per imporre la sanificazione:

Questi test garantiscono che l'app rifiuti in modo coerente input malformati o dannosi.

Integrazione in DevSecOps Pipelines

Applicazione del middleware:

@app.before_request

Scansionando sia il tuo codice che le dipendenze di terze parti aiuta a rilevare richieste non sicure.get, richieste flask e utilizzo del modulo di richiesta flask prima che raggiungano la produzione.

Questo problema va oltre Flask

La gestione non sicura degli input non è un'esclusiva di Flask, ma è presente in tutti i framework web. Fortunatamente, la soluzione è coerente: convalidare gli input in modo tempestivo e rigoroso.

Django (pseudo-codice sicuro):

FastAPI (sicura per progettazione grazie ai suggerimenti sui tipi):

Entrambi gli esempi impongono il tipo e l'intervallo di input, garantendo che i dati in arrivo siano attendibili prima di raggiungere la logica sensibile.

Che si tratti di Flask, Django o FastAPI, ogni parametro di richiesta è un potenziale punto di iniezione se non convalidato correttamente.

Utilizzo di Xygeni per il rilevamento in DevSecOps

In un ambiente DevSecOps, le revisioni manuali non sono sufficienti. Xygeni automatizza il rilevamento di richieste di flask non sicure, moduli di richiesta di flask e utilizzo di requests.get.

Applicazioni pratiche di DevSecOps:

  1. Scansioni statiche: Segnala qualsiasi richiesta.args.get() senza tipo=e chiamate al modulo di richiesta flask prive di convalida.
  2. Analisi delle dipendenze: Monitora le librerie per individuare modelli non sicuri che potrebbero emergere tramite chiamate indirette.
  3. Blocco delle unioni non sicure: CI/CD fallisce se il nuovo codice introduce richieste rischiose o accessi al form non convalidati.
  4. Applicazione di base: Tiene traccia delle modifiche per impedire che le chiamate sicure si trasformino in chiamate non sicure.

L'automazione di questi controlli riduce il rischio di errore umano e mantiene la sicurezza costante senza rallentare la distribuzione.

Quindi, convalidare, sanificare, automatizzare

Ecco la conclusione: requests.get, flask request e flask request form sono tutti non attendibile per impostazione predefinitaSaranno felici di trasmettere dati dannosi, a meno che tu non prenda provvedimenti.

Le tue tre regole:

  • Convalidare input tramite casting e whitelist.
  • espurgare prima che i dati vengano utilizzati per operazioni sensibili.
  • Automatizza controlli nel tuo pipeline per bloccare il codice non sicuro prima della distribuzione.

Un singolo gestore di richieste flask non sicuro, un campo del modulo di richiesta flask non controllato o una chiamata requests.get non protetta possono compromettere la tua applicazione. Tratta ogni parametro come potenzialmente ostile e lascia che il tuo team DevSecOps se ne occupi. pipeline far rispettare le regole ogni volta.

sca-tools-software-strumenti-di-analisi-della-composizione
Dai priorità, risolvi e proteggi i rischi del tuo software
Crea il tuo account gratuito.
Nessuna carta di credito richiesta.

Proteggi lo sviluppo e la consegna del tuo software

con la suite di prodotti Xygeni