exec()安全性

use*_*378 0 php security exec

我正在尝试将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

我还可以添加什么安全检查?

phi*_*hag 6

你想要escapeshellcmd(转义整个命令,或者在你的情况下,escapeshellarg转义参数序列)而不是(只转义一个参数).

请注意,尽管您已采取特殊预防措施,但此代码允许任何人在您的服务器上执行任意命令,方法是在-r选项中指定整个php脚本.请注意,php.ini不能用于限制它,因为它的位置可以被覆盖-c.简而言之(并且误差范围非常小):此代码会产生严重的安全漏洞.