我一直在嘗試爲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;
}
}
對於不同的語言,有不同的污點檢查工具。你沒有指定一種語言,所以我不能推薦任何東西,但谷歌是你最好的朋友 –
@UlugToprak感謝提醒,我通過指定語言爲「Java」來編輯問題。 – Ekin
IntelliJ IDEA集成了可供您使用的工具。 Checkstyle將是我的選擇,也可以集成到IDE的 –