DBD::mysqlPP の話
YAPC::Asia 2011 の1日目の LT のちょい前くらいに、軽く twitter の TL みてたら、こんなのがありました。
JVN#51216285 DBD::mysqlPP における SQL インジェクションの脆弱性
で、そこにこんな風に書いてありました。
対策方法
DBD::mysqlPP を使用しない
開発者によると、「DBD::mysqlPP は、ジョークプログラムとして作成されたものであり、プライベートな利用や MySQL 通信プロトコルの読解を助ける用途にのみ利用し、それ以外の用途においては同一の API を持つライブラリである DBD::mysql 最新版の使用を推奨する」とのことです。
で、「それはないわー」、と思ったので、
http://b.hatena.ne.jp/tsucchi1022/20111014#bookmark-63059158
これほんとに作者の弁?だったらひどいね。CPAN から消すか Acme に置くべきじゃね?「開発者によると、「DBD::mysqlPP は、ジョークプログラムとして作成されたものであり...」
こんな感じで軽く dis ったら、紆余曲折あって(?)、僕がメンテすることになってしまったでござる、という感じです。
僕が思ったのはこんな感じのことです、
- これはジョークソフトでは無いと思う
- libmysql 入れられない/入れたくない事情があるかもしれなくて、そういう場面で使いたい人はいるであろう*2
- 元の作者の方は、残念ながらメンテナンスするモチベーションを失ってしまっている
- 残念だけど、そういうこともある。それは仕方ないと思う
- セキュリティーホールが放置されるのは良くない
- とはいえ、消してしまうのももったいないなー
なので、自分の力で何とかなるなら、何とかしたいなー、と思った次第です。とはいえ、MySQL の通信なんて分からんし、どうしたものかー、と思っていたら、セキュリティーホールはパッとソースを見たら何となくめどはついたし、@nihen さんも手をあげてくれたので、何とかなるだろう、と思って少しずつ手を入れてます。
取り急ぎ、セキュリティ fix だけ行ったバージョンを 0.05 として今朝 CPAN にアップしました。
DBD::mysqlPP
プロダクション環境なら、DBD::mysql を使っているだろうから問題ないとは思うけど、もし使っている人がいたら、バージョンアップしてみてください。(プレースホルダまわりのバグがあって、それもつぶれているはず)。通信ドライバのモジュールも別途あって、そっち一つだけバグを潰してあるので、一緒にあげた方が良いかもしれません。(http://search.cpan.org/~tsucchi/Net-MySQL-0.10/MySQL.pm)
今後ですが、
- ドキュメントの整備
- 「本番環境では使わないでね」って注意入れといた方がいい気がするし、supported OS とか古いし消したいなー、とか、そのへん
- RT で報告されてるバグを潰す
- utf8 まわりのあれこれ(を @nihen さんがやってくれるらしい)
- テストの整備
- Test::mysqld が良く分からないけど使えないので、何とかしないと
- できたら DBD::mysql のテストが通せるようにしたいなー
とかそんな感じのことを考えてます。
リポジトリは僕の github アカウントで管理することにしたので、いじってみたい人は fork + pull-req してみてください。