Exploit in Bash Script Parameter möglich?

9

Ich möchte eine E-Mail-Adresse aus einem Webformular an ein Bash-Skript übergeben. Ich verwende den folgenden regulären Ausdruck:

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

Ist das ausreichend Oder könnte man einen Exploit einbetten?

Das Skript wird von PHP aufgerufen:

system('/usr/local/bin/script.sh "$email"');
chris
quelle
4
Gut gemacht, auch wenn Sie gefragt haben. Ich sehe kein Exploit-Potenzial, aber Sie können einige gültige E-Mail-Adressen ablehnen und einige ungültige akzeptieren. Oh - und du solltest deine Regex verankern .
Wildcard
1
@Wildcard In der Tat macht das Fehlen von Verankerung den regulären Ausdruck als Sicherheitstest unbrauchbar!
Gilles 'SO - hör auf böse zu sein'
Dies könnte eine gültige E-Mail-Adresse sein "the doctor"@gallifrey.com. Beachten Sie das angegebene Leerzeichen in der Benutzernamenkomponente.
Roaima
Ab wann machst du dir Sorgen um einen Exploit? In der Betreffzeile steht "bash", ebenso wie die Sorge um die Erweiterung beim Übergeben von $ email als (in Anführungszeichen gesetztes) Argument an script.sh oder die Behandlung des übergebenen Werts durch script.sh oder die Stringenz des (vermutlich PHP-basierten) Wertes ) Regex oder ???
Jeff Schaller
Es ist nicht klar, wie der reguläre Ausdruck in Ihrem Skript verwendet wird. Für eine gute Analyse geben Sie bitte die relevanten Teile Ihres Skripts an.
Jofel

Antworten:

1

Sie können die E-Mail-Adresse in PHP bereinigen und validieren. Dies ist schneller und sicherer als das Aufrufen eines Shell-Skripts. Das Aufrufen eines Shell-Skripts mit nicht bereinigten Daten von einem Webdienst fügt nur eine weitere Sache hinzu, die kaputt gehen kann.

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

Das obige Beispiel wurde anhand von Beispielen auf der PHP.net-Site angepasst .

Kusalananda
quelle