JavaのSQLインジェクションとは?文字列連結でSQLを書く危険性|確認問題の回答例

Schoo Java入門 中級 第2回 データベース処理とオブジェクト設計

このページは、JavaのSQLインジェクションとは?文字列連結でSQLを書く危険性の確認問題を見直すためのページです。先に自分で考えてから、回答例と見比べてください。

確認問題の回答例

第1問:危険な理由

利用者が入力した文字をSQL文字列に直接つなげているため、入力された引用符や条件式がSQLの一部として解釈される可能性があります。その結果、本来検索したかった曲名とは違う条件で検索されることがあります。

第2問:PreparedStatementを使った書き換え例

String keyword = scanner.nextLine();

String sql = "SELECT id, title, artist FROM songs WHERE title = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, keyword);

ResultSet rs = pstmt.executeQuery();

SQLの中に ? を置き、pstmt.setString(1, keyword) で1番目の ? に値を渡します。入力値をSQL文に直接つなげないため、入力された文字はSQLの命令ではなく、検索する値として扱われます。

元の記事に戻る

JavaのSQLインジェクションとは?文字列連結でSQLを書く危険性