例 3: ソースとシンクのファイルが異なる場合
次の例では、シンクと異なるファイル内のソースを示します。
TestCase_IOT_Xfile_Part1.java:
public class TestCase_IOT_XFile_Part1 {
public static void main(String[] args) {
try {
TestCase_IOT_XFile_Part1 testCase =
new TestCase_IOT_XFile_Part1();
TestCase_IOT_XFile_Part2 testCase2 =
new TestCase_IOT_XFile_Part2();
testCase2.writeToVulnerableSink(
testCase.getVulnerableSource(args[0]));
} catch (Exception e) {
}
}
public String getVulnerableSource(String file)
throws IOException, FileNotFoundException {
FileInputStream fis = new FileInputStream(file);
byte[] buf = new byte[100];
fis.read(buf);
String ret = new String(buf);
fis.close();
return ret;
}
}
TestCase_IOT_Xfile_Part2.java:
public class TestCase_IOT_XFile_Part2 {
public void writeToVulnerableSink(String str)
throws FileNotFoundException {
FileOutputStream fos = new FileOutputStream(str);
PrintWriter writer = new PrintWriter(fos);
writer.write(str);
}
}
TestCase_IOT_Xfile_Part1.java から TestCase_IOT_Xfile_Part2.java までデータをトレースすることにより、プログラム全体を通じてデータ・フローをトレースできます。次のように、スタック・トレースが表示されます。
この例では、TestCase_IOT_XFile_Part1 から TestCase_IOT_XFile_Part2 まで、main メソッド全体のデータ・フローを示しています。