1

我正在查看我的项目的代码分析报告,并在 null 取消引用方面遇到了很多问题。

我们总是将对象声明为 null。比方说

字符串 str = null;

使用条件运算符执行业务逻辑

if (a.equals(b)) { s = "已分配"; }

然后将字符串分配给值对象。

form.setString(str);

我们在代码库中的所有地方都遵循了类似的编码实践,并在整个代码库中完美地处理了非空检查。

但是我们仍然遇到“空取消引用”安全漏洞问题。我不认为这是一个有效的漏洞,因为我们在从 VO 访问任何变量之前不会进行空检查。

可能有一个有效的论点,如果业务逻辑不执行并在您的 VO 中设置为 null 会发生什么。但是在访问它之前处理得很好。

还,

我在初始化空白字符串(或任何原始数据类型)而不是 null (具有等效项)时没有任何问题。如果我添加空支票而不是不为空,这将起作用。但是,集合框架呢?如果我初始化一个数组列表并实例化它(而不是 null),它会为列表分配内存吗?

列表 strList = new ArrayList();

请告知,如果我可以从报告中忽略这些类型的 null 取消引用问题,或者我应该通过实例化它来处理它们。

4

1 回答 1

0

我采访了一位安全架构师。如果你能证明这部分代码不会产生空指针异常,你可以在工具中抑制这个问题。但是需要适当的编码实践来避免在这种不需要的情况下使用 null。

于 2018-04-20T15:34:46.703 回答