PHP shell输入清理

时间:2015-06-02 10:30:35

标签: php git shell security

我想输入字母数字字符串(sha1-git commit ID)。正在使用正则表达式/[^a-z0-9]/进行清理,使用空格字符串preg_replace足以将其安全地传递给shell吗?

1 个答案:

答案 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()是您想要使用的内容,但针对您的特定用例进一步缩小范围也是一个好主意。