Я рассматриваю веб-приложение, которое предоставляет пользователю возможность изменять свой пароль Unix через веб-интерфейс.Аутентифицированный веб-пользователь дает свое имя пользователя в Unix и желаемый пароль.Внедрение команд здесь является очевидным вектором атаки.
Входные данные проверяются и обрабатываются путем назначения имен пользователей только в:/^[a-zA-Z0-9]+$/
После этого он делает что-то вроде (в python):
p = os.popen("/usr/bin/passwd " + username, "w")
и т. Д. И т. П.
Если у них не было этого регулярного выражения,имя пользователя, например jon; rm -rf
, будет катастрофическим для системы или для пользователей.
Я не хочу что-то более фундаментальное, что не будет позволять мне вредить себе, даже если плохой ввод подобного рода уступит местов систему / попен вызов.(Например, подпроцесс )
Есть ли более безопасный способ сделать это, или проверка ввода остается единственной защитой?Я искал что-то более безопасное, чем system / popen или другой подход вообще, если есть стандартный способ выполнения команд, когда часть команды поступает из пользовательского ввода.