Php $#u服务器[';argv';]中的文件操作错误

Php $#u服务器[';argv';]中的文件操作错误,php,file-manipulation,checkmarx,secure-coding,Php,File Manipulation,Checkmarx,Secure Coding,我用Checkmarx测试了PHP应用程序的漏洞。我在$\u服务器['argv']中发现文件操作错误 $argv=$\u服务器['argv']; 如果(计数($argv)

我用Checkmarx测试了PHP应用程序的漏洞。我在
$\u服务器['argv']
中发现文件操作错误

$argv=$\u服务器['argv'];
如果(计数($argv)<3){
echo“用法:”.htmlentities($argv[0])“OldName NewName\n”;
出口(1);
}

我是否需要清理
$\u服务器['argv']
?如何使用?

Checkmarx正在寻找清洁剂,因此请使用stripslashes、basename或realpath函数尝试这种清洁方法:

$argv = realpath($_SERVER['argv']);
if (count($argv) < 3) {
    echo "Usage: ".htmlentities($argv[0])." OldName NewName\n";
    exit(1);
}
$argv=realpath($_服务器['argv']);
如果(计数($argv)<3){
echo“用法:”.htmlentities($argv[0])“OldName NewName\n”;
出口(1);
}

没有人知道什么是文件操作错误,它不是PHP错误。
文件操作错误
-到底是什么?这是我在应用程序的SAST报告中发现的问题。从命令行传递的所有参数都存储在$_SERVER['argv']数组中。因此,每当有人输入cmd并运行php脚本时。它存储在$\u服务器['argv']中。现在我想我必须清理输入数据。对我来说,这完全是猜测。在将值用于某些用途之前,只需对其进行清理。然后,您需要针对特定用例对其进行消毒。在您的示例中,如果通过CLI调用该脚本,则
htmlentities()
将非常无用,因为命令行不会以HTML的形式解析输出(这是函数清理的内容)。
$argv[0]
引用正在运行的脚本,所以我可以想象,checkmarx相信这是脚本覆盖自身的一个向量。它可能只是在任何对
$argv[0]
的引用时发出警报。我在这里看到的唯一漏洞是可能的路径泄漏,您可以通过
basename($argv[0])
剥离目录来解决该漏洞。感谢您的回复。我将用realpathone尝试这一点。我如何清理$argv[1]、$argv[2]。。。我确实添加了filter_var($argv[1],filter_SANITIZE_STRING),但checkmarx仍将其显示为漏洞checkmarx是否显示相同的漏洞类型(文件操纵)?filter_var和filter_SANITIZE_STRING将保护您免受XScan的攻击。您可以将注释中的代码添加到上面的问题中,以便我们能够清楚地了解流程?