我正在尝试将GET查询的安全性添加到exec功能中.
如果我删除escapeshellarg()函数,它工作正常.如何解决这个问题?
ajax_command.php
<?php
$command = escapeshellarg($_GET['command']);
exec("/usr/bin/php-cli " . $command);
?>
Run Code Online (Sandbox Code Playgroud)
假设$_GET['command']值是run.php -n 3
我还可以添加什么安全检查?
你想要escapeshellcmd(转义整个命令,或者在你的情况下,escapeshellarg转义参数序列)而不是(只转义一个参数).
请注意,尽管您已采取特殊预防措施,但此代码允许任何人在您的服务器上执行任意命令,方法是在-r选项中指定整个php脚本.请注意,php.ini不能用于限制它,因为它的位置可以被覆盖-c.简而言之(并且误差范围非常小):此代码会产生严重的安全漏洞.