gpt4 book ai didi

php - 分析不安全代码片段的代码有什么好工具?

转载 作者:行者123 更新时间:2023-12-04 19:27:16 27 4
gpt4 key购买 nike

<分区>

我正在寻找一些可以对 PHP 脚本进行基本测试的工具。

这次我对需要为每段代码编写测试的复杂测试解决方案不感兴趣。我对功能测试既不感兴趣。

我希望这个工具做的是指出可能导致无效使用的代码片段:

  1. 变量;
  2. 函数参数;
  3. 函数返回值。

例如,无效的用法是将 NULL 用作对象或数组,或者将 bool 值作为参数传递给数组或对象(或 NULL)。

此外,它还可能会检查是否使用了“良好实践”,即,如果它发现类似的东西,它可能会警告使用 if ( $condition ) $doSomething; 是不安全的.


为了说明该工具应将哪些内容检测为“不安全”代码片段,这里有几个示例。

在这种情况下,$filter 可能是 NULL,但它被用作数组:

<?php
function getList(array $filter = null) {
$sql = '...';
// ...
foreach ( $filter as $field => $value ) {
// ...
}
// ...
}

在这种情况下,$res 可能是 false,但它被用作 资源

<?php
$res = mysql_query('...');
while ( $row = mysql_fetch_assoc($res) ) {
// ...
}
mysql_free_result($res);

这里是相应的“安全”代码片段:

// $filter is used only if it's non-empty; as list of arguments describes, it may be only NULL or array
function getList(array $filter = null) {
$sql = '...';
// ...
if ( $filter ) {
foreach ( $filter as $field => $value ) {
// ...
}
}
// ...
}

...

// $filter is forced to be an array
function getList(array $filter = null) {
$filter = (array)$filter;
$sql = '...';
// ...
foreach ( $filter as $field => $value ) {
// ...
}
// ...
}

...

// if $res is false, mysql_fetch_assoc() and mysql_free_result() never executes
$res = mysql_query('...');
if ( $res === false ) {
trigger_error('...');
return;
}
while ( $row = mysql_fetch_assoc($res) ) {
// ...
}
mysql_free_result($res);

...

// if $res is false, mysql_fetch_assoc() and mysql_free_result() are skipped
$res = mysql_query('...');
if ( $res !== false ) {
while ( $row = mysql_fetch_assoc($res) ) {
// ...
}
mysql_free_result($res);
}

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com