您的方法可能会导致误报,但更有可能是误报,这更糟,和/或风险评级过低。
数据流分析器使用全局的跨过程污点传播分析来检测源(用户输入)和接收器(危险的函数调用)之间的数据流。
如果数据流分析器找不到接收器,则分析器将停止跟踪此污点传播并转移到另一个,从而丢失漏洞(假阴性)。
以下伪代码是PII 暴露和SQL 注入的示例:
public static void main(String args[]) throws Exception {
ResultSet results = SQLInj(args);
System.out.println(results.Password);
}
public static ResultSet SQLInj(String args[]) {
String query = "SELECT * FROM user_data WHERE last_name = '" + args[1] + "'";
Statement statement = connection.createStatement();
ResultSet results = statement.executeQuery(query);
}
源是main->args[],接收器是SQLInj->executeQuery()。
如果函数SQLInj驻留在未扫描的代码中(不是您团队的代码),则不会发现 SQL 注入问题,因为数据流分析器永远不会找到接收器。语义分析器可以通过查找“密码”一词来找到 PII 暴露,但给出的置信度要低得多。