我想输入字母数字字符串(sha1-git commit ID)。正在使用正则表达式/[^a-z0-9]/
进行清理,使用空格字符串preg_replace
足以将其安全地传递给shell吗?
答案 0 :(得分:1)
你走在正确的轨道上。您可以使用[^0-9a-f]
代替[^0-9a-z]
来阻止某人传递非十六进制字符。
$arg = preg_replace('/[^0-9a-f]/', '', $arg);
if (strlen($arg) === 40) {
// We have a SHA-1 hash
shell_exec("git checkout {$arg}");
}
在一般情况下,escapeshellarg()
是您想要使用的内容,但针对您的特定用例进一步缩小范围也是一个好主意。