Exploit dans le paramètre de script bash possible?


9

Je souhaite transmettre une adresse e-mail d'un formulaire Web à un script bash. J'utilise l'expression régulière suivante:

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

Est-ce suffisant? Ou pourrait-on intégrer un exploit?

Le script est appelé depuis PHP:

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

4
Bravo même pour avoir demandé. Je ne vois aucun potentiel d'exploitation, mais vous pouvez rejeter certaines adresses e-mail valides et accepter certaines non valides. Oh, et vous devriez ancrer votre expression régulière .
Wildcard

1
@Wildcard En effet, le manque d'ancrage rend la regexp inutile comme test de sécurité!
Gilles 'SO- arrête d'être méchant'

Il peut s'agir d'une adresse e-mail valide "the doctor"@gallifrey.com. Notez l'espace cité dans le composant nom d'utilisateur.
roaima

à quel moment êtes-vous inquiet pour un exploit? La ligne d'objet dit 'bash', tout comme la préoccupation concernant l'expansion lors du passage de $ email en tant qu'argument (cité) à script.sh, ou la gestion par script.sh de la valeur transmise, ou la rigueur de la (vraisemblablement basée sur PHP ) regex, ou ???
Jeff Schaller

La façon dont l'expression rationnelle est utilisée dans votre script n'est pas claire. Pour une bonne analyse, veuillez fournir les parties pertinentes de votre script.
jofel

Réponses:


1

Vous pouvez nettoyer et valider l'adresse e-mail en PHP, ce qui sera plus rapide et plus sûr que d'appeler un script shell. L'appel d'un script shell avec des données non-désinfectées à partir d'un service Web ne fera qu'ajouter une autre chose qui peut casser.

$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";
}

Exemple ci-dessus adapté d' exemples sur le site PHP.net .

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.