私は、Javaプログラミング言語の「メソッドのパラメータを追跡する」という正確な用語を見つけようとしていますが、私は一般に「汚れ分析」を見つけましたが、正しい経路にいるかどうかはまだ分かりません。メソッドパラメータを追跡する方法は?
私が欲しいのは、メソッドのパラメータを追跡し、メソッドのどの部分(スコープ内)がパラメータの効果をするかを確認することです。たとえば、パラメータが別の変数に割り当てられている場合は、割り当てられた変数も追跡する必要があります。 「部品」に言及することによって、制御フローグラフのコード、ステートメント、または分岐のラインとなり得る。
また、ツールを確認してChecker FrameworkとFindbugsと出会ったが、私が望むニーズを十分に満たしていないか、自分のニーズに対応できるようにできなかったようだ。
「汚れ分析」が私が探している正しい用語であるかどうかを教えてください。また、他のツール提案も歓迎します。
Checker Framework Live Demoの下に編集されたコードがあります。私が期待しているのは、変数String input
が汚染されている場合、processRequest()
の内部にあります。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;
}
}
さまざまな言語でさまざまな汚れチェックツールがあります。あなたは言語を指定していないので何もお勧めできませんが、Googleはあなたの親友です –
@UlugToprakはリマインダーに感謝し、言語を "Java"として指定して編集しました。 – Ekin
IntelliJ IDEAには、使用できる統合ツールがあります。 Checkstyleは私の選択になります。これはIDEに統合することもできます –