ikepyonのだめ人間日記

セキュリティに関することを書いていく予定。

JavaとMySQLの組み合わせでUnicodeのU+00A5を用いたSQLインジェクションの可能性

http://www.tokumaru.org/d/20081222.html#p01
PreparedStatementに関することが書いていないので、参考まで。
http://d.hatena.ne.jp/ikepyon/20061215#p2
http://d.hatena.ne.jp/ikepyon/20070216#p1
http://d.hatena.ne.jp/ikepyon/20061208#p2
ま、一文だけだけどなw
一応実証したところ、MySQL4.0ではPreparedStatementを使用してもUnicodeのU+00A5を使用した攻撃は有効。
ただし、MySQL5.xでは無効。
その後の確認で、MySQLJDBCとは全く関係なかったということも追記しとく。同じJDBCで4.xでは発生したけど、5.0では発生しなかった。なので、原因はMySQL4.0側のPreparedStatement関連がタコなことらしい。
ということで、最新のものにしときましょう。

(追記)
徳丸さんのところで追試した結果、MySQL5.1でもPreparedStatementがだめだったらしい。うーん、そうなると何が依然やったときダメだったんだろう?

(追記ソノに)
最新のMsSQLJDBCでは、デフォルトではサーバーサイドPreparedStatementを使用しないらしい。以前のバージョンでは使える場合は、デフォルトでサーバーサイドPreparedStatementを使用していたようだ。
そのため、サーバーサイドPreparedStatementが使用できるMySQL5.xでの、私の検証では問題が無かったようだ。