セキュアコードコースの一部として、文字列のconcatintionなどを使用してクエリが構築される脆弱なJavaシステムが提供されています。私はログインしてデータ取得するためにSQLを注入するために持っているそれぞれのコード行を以下に示します。SQL(HSQLDB)内の文字列に完全な結果セットを変換する
String comment;
int articleID;
//...
stmt.executeUpdate("INSERT INTO comment (text, article_id) VALUES ('" + comment + "', " + articleId + ")");
comment
は、任意のテキストに設定することができ、それだけでテキストボックスからプレーンテキストを読まされます。したがって、私は(表user
が列login
とpassword
を持っている)、完全なログインデータを読み込み、SELECT
ステートメントにテキストボックスのテキストを設定することについて考えた:
INSERT INTO comment (text, article_id) VALUES ('' || (SELECT login || password FROM user) || '', 4)
を生じるはずである全体の中
' || (SELECT login || password FROM user) || '
カーディナリティ違反
:はまだ、これは
org.hsqldb.HsqlExceptionになり
質問:
私は(SELECT login || password FROM user)
が単一の文字列ではなく、結果セット、したがって||
を用いて連結されなくてもよいためであると仮定する。
このSQLインジェクションシナリオ(HSQLDBで動作する標準SQL/SQL)で使用できる方法で、完全な結果セットを1つの文字列に変換できますか?