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"');

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 .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.