我一直在尝试为 Java 编程语言找到“跟踪方法的参数”的确切术语,我通常会找到“污点分析”,但仍然不确定我是否走在正确的道路上。
我想要的是,跟踪方法的参数并查看方法的哪一部分(在范围内)对参数产生影响。例如,如果一个参数被分配给另一个变量,我也想跟踪分配的变量。通过提及“部分”,它可以是控制流图的代码行、语句或分支。
我还检查了工具并遇到了Checker Framework和Findbugs,但是它们似乎不能完全满足我想要的需求,或者我无法让它们满足我的需求。
请告诉我“污点分析”是否是我正在寻找的正确术语。此外,欢迎任何其他工具建议。
下面有一个来自Checker Framework Live Demo的编辑代码。我期望的是,processRequest()
当变量String input
被污染时,我期望在方法中的所有行都收到警告或错误executeQuery()
。因为一个受污染的变量被传递给它的参数。
import org.checkerframework.checker.tainting.qual.*;
public class TaintingExampleWithWarnings {
String getUserInput() {
return "taintedStr";
}
void processRequest() {
@Tainted String input = getUserInput();
executeQuery(input); //error: pass tainted string to executeQeury()
}
public void executeQuery(@Untainted String input) {
// Do some SQL Query
String token = input + " Hello World";
String tokens[] = token.split(" ");
for(int i=0; i<tokens.length; i++)
{
System.out.println((i+1)+"String: "+tokens[i])
}
}
/* To eliminate warning in line 10, replace line 10 by
* executeQuery(validate(input)); */
/*@Untainted*/ public String validate(String userInput) {
// Do some validation here
@SuppressWarnings("tainting")
@Untainted String result = userInput;
return result;
}
}