1

我正在尝试使用 php exec 运行 shell 脚本。

问题是 - 这不是很安全,因为我通过 html 文本框发布到它,即

<?php
$output = shell_exec ('whois '.$_POST['domain']);
echo "<pre>$output</pre>";
?>

事情是......如果用户输入| rm -rf *

它会删除文件夹中的所有内容。

是否有一种安全的方式来执行 shell 脚本并防止这种情况发生?

谢谢

4

2 回答 2

1

总是有一个函数可以逃避传递给另一个系统的用户数据。在 shell 命令的情况下,有escapeshellarg。无论您对用户输入进行何种其他类型的验证,在将参数传递给 shell 函数之前对其进行转义总是一个好主意。

例如:

$domain_arg = escapeshellarg( $_POST['domain'] );
$output = shell_exec( 'whois ' . $domain_arg );
于 2013-04-26T15:24:14.297 回答
0

你想做一个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";
}
于 2013-04-26T12:08:24.953 回答