È possibile sfruttare il parametro dello script bash?


9

Voglio passare un indirizzo e-mail da un modulo Web a uno script bash. Sto usando il seguente regex:

/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}/

È sufficiente? O si potrebbe incorporare un exploit?

Lo script viene chiamato da PHP:

system('/usr/local/bin/script.sh "$email"');

4
Ben fatto anche per averlo chiesto. Non vedo alcun potenziale di exploit ma potresti rifiutare alcuni indirizzi email validi e accettarne alcuni non validi. Oh, e dovresti ancorare la tua regex .
Wildcard

1
@Wildcard In effetti la mancanza di ancoraggio rende inutile la regexp come test di sicurezza!
Gilles 'SO- smetti di essere malvagio'

Questo potrebbe essere un indirizzo email valido "the doctor"@gallifrey.com. Nota lo spazio tra virgolette nel componente nome utente.
roaima,

a che punto sei preoccupato per un exploit? La riga dell'oggetto dice 'bash', così è la preoccupazione per l'espansione mentre passa $ email come argomento (citato) a script.sh, o alla gestione del valore passato da parte di script.sh o alla rigidità del (presumibilmente basato su PHP ) regex o ???
Jeff Schaller

Non è chiaro come viene usato regexp all'interno del tuo script. Per una buona analisi, si prega di fornire le parti pertinenti della sceneggiatura.
jofel,

Risposte:


1

È possibile disinfettare e convalidare l'indirizzo e-mail in PHP, che sarà più rapido e sicuro rispetto alla chiamata di uno script di shell. La chiamata di uno script di shell con dati non autorizzati da un servizio Web aggiungerà solo un'altra cosa che può rompersi.

$sanitized_email = filter_var($email, FILTER_SANITIZE_EMAIL);
if (filter_var($sanitized_email, FILTER_VALIDATE_EMAIL)) {
    echo "This sanitized email address is considered valid.\n";
    echo "Before: $email\n";
    echo "After:  $sanitized_email\n";    
} else {
    echo "This sanitized email address is considered invalid.\n";
}

Esempio sopra adattato da esempi sul sito PHP.net .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.