WebGoat-8: SQL Injection (mitigation)

ストアド・プロシージャやパラメータ化クエリを学ぶ。

Page 5

穴埋め問題。
プログラミング言語で、ましてやJavaでSQLを構築するなんてやったことないが、前ページを見とけば雰囲気でわかる。
答えは以下の通り。

Connection conn = DriverManager.getConnection(DBURL, DBUSER, DBPW);
PreparedStatement statement = conn.prepareStatement("SELECT status FROM users WHERE name=? AND mail=?");
statement.setString(1, name);
statement.setString(2, mail);

Page 6

こんどは一通り自分でコードを書いてみろ、という問題。
とはいえ前のページから結構パクっている。

String name = "Tom"; // 名前はなんでもいい
String query = "SELECT * FROM users WHERE name = ?";
try (Connection conn = DriverManager.getConnection(DBURL, DBUSER, DBPW);
     PreparedStatement stmt = conn.prepareStatement(query)) {
         stmt.setString(1, name);
         stmt.executeQuery();
} catch (SQLException sqle) {
    System.out.println("Oops. Something went wrong!");
}

Page 9

わからん。

Page 10

わからん。

Page 12

わからん。