tsucchi’s diary(元はてなダイアリー)

はてなダイアリー(d.hatena.ne.jp/tsucchi1022)から移行したものです

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 ったら、紆余曲折あって(?)、僕がメンテすることになってしまったでござる、という感じです。
僕が思ったのはこんな感じのことです、

  • これはジョークソフトでは無いと思う
    • もしそうなら CPAN に置くのはよくないし、置くとしても Acme::だよね*1
  • 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 してみてください。

*1:結構古いモジュールなので、当時は Acme 名前空間がなかったかもしれない

*2:とはいえ、基本的には DBD::mysql を使うべきである