Come accettare l'input dell'utente per l'utilizzo nel terminale in modo sicuro?

2

Ho trovato una vulnerabilità e non sono sicuro di come applicarla. Attualmente accetto l'input dell'utente e lo utilizzo per creare un comando terminale che eseguo sul server. Ecco il codice semplificato.

// Get user input
$monochromeThreshold = $_POST['monochromeThreshold'];
$originalFile = $_POST['originalFile'];
$monochromeLocation = $_POST['monochromeLocation'];

// Create command
$command = 'convert -density 150 -threshold ' . $monochromeThreshold . '% -fuzz 1% -transparent white ' . $originalFile . ' ' . $monochromeLocation;

// Execute command
$out = system($command);

C'è un modo per disinfettare l'input dell'utente o intraprendere altre azioni per prevenire l'iniezione nel terminale con sicurezza?

    
posta Goose 13.06.2016 - 22:27
fonte

2 risposte

1

Php ha alcune funzioni di escape per l'utilizzo dei dati forniti dall'utente nei comandi, escapeshellcmd 1 e escapeshellarg 2 . Esistono tuttavia alcune limitazioni nell'utilizzo di queste funzioni. Se usato con un comando che ha interruzioni di riga di comando non sicure. Ho scritto un post del blog dettagliato su di esso 3 .

Assicurati inoltre che l'installazione di imagemagick sia aggiornata e configurata correttamente per impedire lo sfruttamento del recente imagetragick 4 e popen () 5 vulnerabilità.

    
risposta data 14.06.2016 - 01:04
fonte
1

Penso che dovresti fare due tipi di misure di sicurezza per prevenire l'iniezione.

1. In primo luogo, convalidare i dati di input, dovresti utilizzare una lista bianca o una lista nera, pensare in quale sia il modo migliore per controllare i dati di input, la lista bianca viene solitamente utilizzata per convalidare i dati di input, perché è più facile determinare qual è il formato corretto per i dati di input. Ti consiglio di utilizzare espressioni regolari come questa:

$originalFile = $_POST['originalFile'];
$regex = "/[a-zA-Z1-9]{1,10}(\.)((jpg)|(gif))/";

if (preg_match($regex, $originalFile)) {
   //correct input data
}

2. Secondo, ci saranno caratteri che non puoi evitare di usare sul tuo codice, quindi dovresti usare le funzioni di escape, il linguaggio PHP ha alcune opzioni, dovresti visitare la pagina ufficiale, penso che questa funzione possa aiutare si:

link

Spero che questa informazione ti aiuti, buona fortuna.

    
risposta data 14.06.2016 - 15:33
fonte

Leggi altre domande sui tag