ホーム > mysql | perl > mysqlでskip-character-set-client-handshakeはもう使わないほうがいいと思われ

mysqlでskip-character-set-client-handshakeはもう使わないほうがいいと思われ

  • 投稿者: chiba
  • 2009/8/27 木曜日 16:51:43
  • mysql | perl

skip-character-set-client-handshake を [mysqld] セクションに追記すると、クライアントがどんな文字コード設定をもっていようが問答無用で character_set_* を (_system をのぞいて) すべて同じ値に統一してくれる
http://d.hatena.ne.jp/a666666/20090826/1251270979

ふーむ。

skip-character-set-client-handshakeを薦める文書がネット上にはやたら転がってるんだけど、これには大きな落とし穴がある。

たしかに表示されるcharacter_set_*は統一されるかもしれないがこれはあくまでもサーバー側の認識であってクライアント(libmysqlclient)がcharsetをどう認識しているかというのとは関係ないのだ。で、実はlibmysqlclientが認識しているcharsetはcharacter_set_clientとは必ずしも一致しているわけではなくて、これを絶対的に一致させるには以前のエントリでも紹介したがhttp://www.klab.jp/media/mysql/index6.htmlの図3:クライアント側文字コードの指定チャートが参考になる。

skip-character-set-client-handshakeをしただけだと結局libmysqlclientが認識しているcharsetはクライアント側のコンパイル時のcharset(デフォルトではlatin-1)になる。ここで実際に送信するcharsetと乖離が起これば当然組み合わせによってはSQLインジェクションの脆弱性が発生する。id:a666666氏のmysqlはutf8でコンパイルしてujisを送信ということなので脆弱性はなさそうだが(あったら誰か教えてください)、例えばcp932を送信するのであれば以前のエントリと同様に(反対方向だけど)”\xe3\x81\x95\x5c”等が危険な文字列になる。これをlibmysqlclientはUTF-8として認識してエスケープするので”\xe3\x81\x95\x5c\x5c”になるが、サーバー側ではcp932と認識するので”\xe3\x81″ “\x95\x5c” “\x5c”と分割されてしまうという感じだ。

そもそもskip-character-set-client-handshakeなんてのはmysql4.0からの移行組用の臨時救済措置で作られたものだろうし、こんなものを使うことを前提に運用するのはやめたほうがいい。よくいわれている文字コードの変換処理をさせたくない、ということであればフィールドの文字コードと通信の文字コードを統一しておけばいいだけでしょう。

はてなブックマーク - mysqlでskip-character-set-client-handshakeはもう使わないほうがいいと思われ

コメント:0

コメントフォーム
入力した情報を記憶する

トラックバック:2

この記事のトラックバック URL
http://blog.everqueue.com/chiba/2009/08/27/291/trackback/
トラックバックの送信元リスト
mysqlでskip-character-set-client-handshakeはもう使わないほうがいいと思われ - へぼい日記 より
pingback - MySQLサーバーをインストールして初期設定をする - @blog.justoneplanet.info より 2010/8/30 月曜日

[…] mysqlでskip-character-set-client-handshakeはもう使わないほうがいいと思われ […]

pingback - WindowsとXAMPPでMySQLの文字コード設定 « SetucoCMSプロジェクト より 2011/1/24 月曜日

[…] ただし、skip-character-set-client-handshakeについては mysqlでskip-character-set-client-handshakeはもう使わないほうがいいと思われ – へぼい日記 という情報もあるし、クライアントの意向を無視し […]

ホーム > mysql | perl > mysqlでskip-character-set-client-handshakeはもう使わないほうがいいと思われ

検索
フィード
メタ情報

ページの上部に戻る