SQLインジェクション
SQLインジェクション
概要
SQLインジェクションは、信頼できない入力をSQL文へ直接連結したときに発生します。
影響
攻撃者はデータの参照、改ざん、削除、認証回避を行う可能性があります。
対策
文字列連結ではなく、プレースホルダ、プリペアドステートメント、ORMのバインド、厳格な入力検証を使用します。
例
try {
String tableName = props.getProperty("jdbc.tableName");
String name = props.getProperty("jdbc.name");
String query = "SELECT * FROM " + tableName + " WHERE Name =" + name;
stmt = con.createStatement(query);
rs = stmt.executeQuery();
...
} catch (SQLException sqle) { ... } finally { ... }
<select id="selectByUserId" resultType="com.devkuma.dto.User">
SELECT user_id,
FROM devkuma_user
WHERE user_id = '${userId}'
</select>
String tableName = props.getProperty("jdbc.tableName");
String name = props.getProperty("jdbc.name");
String query = "SELECT * FROM " + tableName + " WHERE Name =" + name;
stmt = con.prepareStatement(query);
rs = stmt.executeQuery();
...
String tableName = props.getProperty("jdbc.tableName");
String name = props.getProperty("jdbc.name");
String query = "SELECT * FROM ? WHERE Name = ?";
stmt = con.prepareStatement(query);
stmt.setString(1, tableName); stmt.setString(2, name);
rs = stmt.executeQuery();
...