2010年2月 2日

[mysql 15181] skip-character-set-client-handshake やSET NAMES は使うべきではない(wasRe: Re: MyODBCの文字化けについて

こんにちは。

> > 2、3年前の情報なので、今現在は状況が変わっているかもしれませんが、
> > cp932, sjis を使うのは難しいです。
> > 文字化けといっても「?」になるだけでなく、insertすると
> > 余分な「\」が付くトラブルもありました。

と書きましたが、気になってネットで情報を追ってみました。


MySQLで文字化けを解決するのに、
skip-character-set-client-handshake や SET NAMES を
使うのは、もはや正解ではないようです。

理由を簡単にまとめると以下の通りです。

skip-character-set-client-handshake、SET NAMES で文字化け
などの問題を解決してしまうと、SQLインジェクションの脆弱性を生じます。
これらのオプションやコマンドは、文字コードの設定を*無理やり*
変えてしまうので、問題の表層だけ解決しまう可能性があります。
文字化け(??になったり、無用な¥が挿入されたり)、SQLインジェク
ション、がなぜ発生するかというと「サーバ/データベース/クライ
アント」の文字コードの設定が一致していないからです。

文字コードを指定する適切な方法は、使用するクライアントに
よって異なりますが、私が知っている限りでは、次の方法があります。
・my.cnf/my.iniの [client] default-character-set で指定する方法)
・--default-character-setオプションで指定する方法(mysqlのコマンドラインツール)
・専用関数を使う方法(PHPのmysql_set_charset関数)

以下で知りました。

へぼへぼCTO日記 - mysqlでskip-character-set-client-handshakeはもう使わないほうがいいと思われ
http://www.geminium.com/chiba_blog/2009/08/27/291/

yohgaki's blog - SET NAMESは禁止:
http://blog.ohgaki.net/index.php/yohgaki/2007/08/22/set_namesa_mcb_asc

以下、個人メモです。

2007/04/23-01、skip-character-set-client-handshake について - debian-etch に関するメモ(後、lennyへアップグレード)
http://goungoun.dip.jp/app/fswiki/wiki.cgi/debianetch?page=2007%2F04%2F23%2D01%A1%A2skip%2Dcharacter%2Dset%2Dclient%2Dhandshake+%A4%CB%A4%C4%A4%A4%A4%C6#p3

On Tue, 2 Feb 2010 09:48:12 +0900
土田利之 <tuchida.toshiyuki@xxxxx> wrote:

> tuchidaです
>
> みなさん
> ご報告がおくれてすみません。
>
> 一応、解決したのでご報告します。
>
> 1.ODBCについて
> MyODBC3.51のリージョンが古いもの(11とか)は過去ログをみると
> 文字化けのトラブルがあったようですが
>
> 現在の27に関しては問題がありませんん。
> (すくなくとも私の環境にかんしてはです)
>
> 2.ACCESSで文字がばけなくてもADOでは化ける
>
> もっと追究すべきなのかもしれませんが対処療法的な解決として
> 1)システムDSNとして登録する際に
>   Character Set=sjisを指定
> Return Matching Rowをチェックする
>
> 結果的にこれでACCESS2000はリンクテーブルとして読めました。
> しかしADO接続では相変わらず文字が化ける(???となる)ため
> 接続直後に
> 「SET NAMES sjis」と指定したSQLを実行しました。
> (過去に書いたなかでエラーと書きましたが、他のSQLと”;”で区切って
> 実行したためでした)
>
> これで読めるようになりました。
> お騒がせしました
>
>
> 2010年1月27日13:53 goungoun <gounx2@xxxxx>:
> > こんにちは。
> >
> > # 参考ということで。
> >
> > 2、3年前の情報なので、今現在は状況が変わっているかもしれませんが、
> > cp932, sjis を使うのは難しいです。
> > 文字化けといっても「?」になるだけでなく、insertすると
> > 余分な「\」が付くトラブルもありました。
> >
> > mysql:13883 以降でやりとりしています。
> >
> > mysql:13801-13900
> > http://www.mysql.gr.jp/mysqlml/mysql/thread/13801-13900
> >
> > 私が調べたものでまとめ的に投稿したのは以下
> >
> > mysql:13924
> > http://www.mysql.gr.jp/mysqlml/mysql/msg/13924
> >
> > <環境>
> > ・MySQLサーバ
> > mysqld Ver 5.0.32-Debian_7etch1-log for pc-linux-gnu on i486 (Debian etch distribution)
> > utf8環境です。
> > ・MyODBC
> > mysql-connector-odbc-3.51.14-win32.msi
> > ・Access2000
> > ・MDAC2.8
> >
> > での話として書いてます。
> >
> > よくあるトラブルのようなので、自前の環境で解決するかどうかは
> > 別として、googleなどで検索すれば情報は
> > たくさん見つかると思います。
> >
> >
> >
> >
> > 以下、主題とは関係ありませんが。。。
> >
> > On Wed, 27 Jan 2010 12:42:23 +0900
> > Masaaki Matsuyama <masakun@xxxxx> wrote:
> >> 真・技術系メーリングリスト FAQ
> >> < http://www.geocities.co.jp/SiliconValley/5656/>;
> >
> > 真・技術系はわりと難解だと思います。量も多いですし。
> > 個人的には、
> >
> > 技術系メーリングリストで質問するときのパターン・ランゲージ
> > http://www.hyuki.com/writing/techask.html
> >
> > がお勧めです。
> > 量も多くないので、すぐ読めますし実践的です。
> >
> >
> > --
> > goungoun <gounx2@xxxxx>
> > http://goungoun.dip.jp/app/
> >
> >
> >

--
goungoun <gounx2@xxxxx>
http://goungoun.dip.jp/app/

投稿者 xml-rpc : 2010年2月 2日 16:49
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/93053
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。