Webセキュリティの小部屋

Twitter のフォローはこちらから Facebook ページはこちら Google+ページはこちら RSSフィードのご登録はこちらから
公開日:2013年3月3日
最終更新日:2013年12月26日

SQLインジェクション対策(Java編)

Java で SQL インジェクション対策を実際にどのように行うのか、簡単なログイン処理で具体的に見てみましょう。

ログイン処理の概要は以下の通りです。動作環境は、Tomcat 7 + SQL Server 2012 になります。

java

接続先のデータベース名は Test、テーブル名は LOGIN で、列名は ID, PASSWORD です。

・login.jsp

・login(Login.java)

(追記)

データーベースの種類と接続方法によっては、Java でプレースホルダを指定しても、安全な「静的プレースホルダ」ではなく、SQL インジェクションの可能性が起きうる「動的プレースホルダ」を使用する場合があります。詳しくは、IPA が公開している「安全なSQLの呼び出し方」をご参照ください。

(追記2)

JDBC Driver の仕様では、PreparedStatement を利用しても、必ずしもプレースホルダとしてSQL インジェクションを防ぐという期待通りの動作を保証している訳ではないようです。ですので、 PreparedStatement が SQL インジェクションを防ぐかどうかは JDBC Driver の実装に依存します。採用する JDBC Driver が PreparedStatement で SQL インジェクションを防げるか動作確認をする必要があります。Java + Oracle, Java + MySQL については「安全なSQLの呼び出し方」に記載があるのでご参照ください。

 

・welcome.jsp


スポンサーリンク




カテゴリー:Webアプリケーションセキュリティ

Twitter でも、いろんな情報を発信しています。



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA