Checkmarx对PHP和库的理解程度如何



很抱歉有一个非常宽泛的问题,但我们有一些问题,例如Checkmarx抱怨在以下中的代码注入

$accesskey = $_GET['accesskey'] ?? $argv[1] ?? null;
if (!$accesskey || !ctype_alnum($accesskey)) {
throw new RuntimeException(sprintf('Passed accesskey "%s" is invalid', $accesskey));
}
$commandParts = ['echo', $accesskey]
$commandParts = array_map('escapeshellarg', $commandParts);
$command = implode(' ', $commandParts);
$command = escapeshellcmd($command);
system($command);

我认为命令逃脱了,一切都很好,但为什么Checkmarx的想法不同?

应用程序的<?php方法在REDACTED的第1行调用一个带有系统的OS(shell(命令,使用一个不受信任的字符串执行该命令。

这可能允许攻击者注入任意命令,并启用命令注入攻击。

攻击者可以通过用户输入_GET注入执行的命令,该命令由<?php方法,位于REDACTED的第1行。

我还想知道Checkmarx是否以及如何理解通过Composer安装的库或框架代码?例如

Assert::oneOf($unsafeUserInput, ['foo', 'bar']); // throws an Exception if $unsafeUserInput is not 'foo' or 'bar'
// $unsafeUserInput is now safe

或者WP相关的东西,也经常被错误地标记为易于SQL注入

global $wpdb;
$foo = $wpdb->getVar($wpdb->prepare('SELECT foo FROM bar WHERE baz = %s', $_GET['baz'] ?? ''));

如果它检查消毒方法,有没有一种特定的方法?老实说,我想避免为Checkmarx更改太多代码。

Checkmarx分析PHP代码的效果问题可能倾向于主观答案,并且您对该工具的看法可能会有偏差,因为您使用的方法(escapeshellcmd(未被识别为消毒剂,并且您查询的框架(Wordpress和Composer(在技术上不受支持。

公平地说,Checkmarx确实支持各种PHP框架,如Zend、Kohana、CakePHP、Symfony和Smarty,这些框架可能会导致较少的误报(注意:我不建议您切换平台(

任何静态分析器都需要it用户的帮助才能有效。我建议您从扫描中排除Composer文件。

你真的不必对代码进行更改,只需与你的AppSec团队争论这些发现是误报,因为prepare方法可以防止SQL注入攻击,而escapeshellcmd确实对字符串进行了编码。然而,我的建议是在$accesskey上使用escapeshellarg,而不是

相关内容

  • 没有找到相关文章

最新更新