Возможно ли использовать эксплойт в скрипте bash?


9

Я хочу передать адрес электронной почты из веб-формы скрипту bash. Я использую следующее регулярное выражение:

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

Достаточно ли этого? Или можно было внедрить подвиг?

Скрипт вызывается из PHP:

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

4
Хорошо сделано даже для того, чтобы спросить. Я не вижу возможности использовать эксплойт, но вы можете отказаться от некоторых действительных адресов электронной почты и принять некоторые недействительные. Ох, и вы должны закрепить свое регулярное выражение .
Wildcard

1
@Wildcard Действительно, отсутствие привязки делает регулярное выражение бесполезным в качестве теста безопасности!
Жиль "ТАК - перестань быть злым"

Это может быть действительный адрес электронной почты "the doctor"@gallifrey.com. Обратите внимание на кавычки в компоненте имени пользователя.
Ройма

в какой момент вы беспокоитесь о подвиге? В строке темы написано 'bash', поэтому проблема заключается в расширении при передаче $ email в качестве (цитируемого) аргумента в script.sh, или обработке script.sh переданного значения, или строгости (предположительно на основе PHP). ) регулярное выражение или ???
Джефф Шаллер

Не ясно, как регулярное выражение используется внутри вашего сценария. Для хорошего анализа, пожалуйста, предоставьте соответствующие части вашего сценария.
Джофель

Ответы:


1

Вы можете очистить и проверить адрес электронной почты в PHP, что будет быстрее и безопаснее, чем вызов сценария оболочки. Вызов сценария оболочки с неанизированными данными из веб-службы просто добавит еще одну вещь, которая может сломаться.

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

Пример выше адаптирован из примеров на сайте PHP.net .

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.