Я хочу ввести буквенно-цифровую строку (sha1 - git commit ID). Является ли sanitizing regexp /[^a-z0-9]/
, используя preg_replace
с пустой строкой, чтобы безопасно передать ее оболочке?
Ты на правильном пути. Вы можете использовать [^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()
- это то, что вы хотите использовать, но сужение его для вашего конкретного случая использования также является хорошей идеей.
escapeshellarg()
всего использоватьescapeshellarg()
... php.net/manual/en/function.escapeshellarg.php