我正在java项目中使用“HP Fortify v3.50”,我发现很多关于“Null Dereference”的误报,因为Fortify没有看到针对null的控件是另一种方法。 如何减少误报并维持规则?
这是POC
public class MyClass {
public static void main(String[] args) {
String string01 = null;
String string02 = null;
int i;
if (args[0].equals("A")) {
string01 = "X";
string02 = "Y";
}
if (!isNull(string02)){
i = string02.length();} //False Positive
else {
i = string02.length();
} // Yes, it is an error!
}
public static boolean isNull(Object toBeTested){
return (null == toBeTested);
}
}
结果:
[E8837DB548E01DB5794FA71F3D5F51C8 : medium : Null Dereference : controlflow ]
MyClass.java(13) : Assigned null : string02
MyClass.java(16) : Branch not taken: (!args[0].equals("A"))
MyClass.java(20) : Branch taken: (!isNull(string02)) //False Positive
MyClass.java(21) : Dereferenced : string02
[E8837DB548E01DB5794FA71F3D5F51C9 : medium : Null Dereference : controlflow ]
MyClass.java(13) : Assigned null : string02
MyClass.java(16) : Branch not taken: (!args[0].equals("A"))
MyClass.java(20) : Branch not taken: isNull(string02)
MyClass.java(23) : Dereferenced : string02
答案 0 :(得分:0)
这看起来更像是您应该带给他们的支持团队的SCA问题。或者只是审核它不是问题。这不是可以使用自定义规则修复的内容。
答案 1 :(得分:-4)
取消引用空指针或进入无限循环可以启用拒绝服务攻击,但它也可以创建攻击者利用一些经过深思熟虑的错误处理代码所需的条件。
请参阅https://cwe.mitre.org/data/definitions/476.html和https://www.owasp.org/index.php/Null_Dereference