我正在尝试使用 php exec 运行 shell 脚本。
问题是 - 这不是很安全,因为我通过 html 文本框发布到它,即
<?php
$output = shell_exec ('whois '.$_POST['domain']);
echo "<pre>$output</pre>";
?>
事情是......如果用户输入| rm -rf *
它会删除文件夹中的所有内容。
是否有一种安全的方式来执行 shell 脚本并防止这种情况发生?
谢谢
总是有一个函数可以逃避传递给另一个系统的用户数据。在 shell 命令的情况下,有escapeshellarg。无论您对用户输入进行何种其他类型的验证,在将参数传递给 shell 函数之前对其进行转义总是一个好主意。
例如:
$domain_arg = escapeshellarg( $_POST['domain'] );
$output = shell_exec( 'whois ' . $domain_arg );
你想做一个whois。所以你需要验证它是否只包含你想要的部分。在你的情况下,一个域,没有别的。
if (preg_match('/^(?:[-A-Za-z0-9]+\.)+[A-Za-z]{2,6}$/', $_POST['domain']))
{
$output = shell_exec('whois ' . $_POST['domain']);
echo "<pre>$output</pre>";
}
else
{
echo "stop trying to make my server annoyed";
}