ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと

・リンク先で下記のように書かれているのですが、SET NAMESは使わない方が良いでしょうか?
・SET CHARACTER SETなら良いでしょうか?
・.cnfを使用しない場合は、直接指定も可?

>SET NAMES だとMySQLサーバには charset が伝わるけれどクライアント側は latin1 のままなのでエスケープ処理で問題が出る可能性があります
http://qiita.com/ngyuki/items/d88a4df860abb51eb714

A 回答 (4件)

以前にも貼ったと思いますがもう一度w



http://qiita.com/mpyw/items/b00b72c5c95aac573b71 …

5.3.5より古いバージョンを使っていること自体にもう問題があるといっても過言ではないですね。最新リビジョンの5.3.29に更新すべきです。というよりも根本的にマイナーバージョンで見て、5.3系のサポートは切れているので使うべきではありません。5.4以降を使いましょう。5.6または5.5がおすすめです。

ここからは記事の内容と重複しますが一応…

・「SET NAMES」「SET CHARACTER SET」を使ってもデフォルトの「latin1→UTF-8」のケースではエスケープ漏れが発生することはありません。ngyukiさんが心配されていますが問題ありません。但し、ソースからビルドしている場合で、コンパイルオプションにてデフォルトの文字セットを「cp932(Shift_JIS)」に変更している場合は脆弱性となります。

・「SET NAMES」はMySQLに送る文字列にのみ作用しますが、「SET CHARACTER SET」は送る文字列に加え送られてくる文字列にも作用します。処理が重めになるので使わない方がいいです。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

>5.3.5より古いバージョンを使っていること自体にもう問題があるといっても過言ではないですね
・あまり意識していなかったのですが、5.3ってそういう扱いなんですね
・古いバージョンを使用し続ける理由もないので、(先ずは)PHP5.4へ上げました
・いつかはバージョンアップしなければいけないと思っていたので、いい機会になりましたー

お礼日時:2014/09/02 11:29

一つ重要なことを書き忘れました。



PDO::ATTR_EMULATE_PREPARES

このオプションをFalseに設定している場合は先ほど危険と説明したケースにおいても安全です。デフォルトはTrueなのでご注意を。
    • good
    • 0
この回答へのお礼

補足ありがとうございましたー

お礼日時:2014/09/02 11:21

なお「文字化けする」なら(対処しないといけないことがわかるので)まだマシです。



怖いのは『適切な(文字セットまで加味した)エスケープが行われない』ことによって、セキュリティホールとなってしまうこと。文字化けせずに表示出来れば何も問題がないというものではありません。
    • good
    • 0
この回答へのお礼

回答ありがとうございましたー

お礼日時:2014/09/02 11:20

phpスクリプト側の話ですよね(MySQLサーバ側の設定は不問とします)。

わざわざset namesやset character set を使う意味はありません。

php5.3.6以降でPDO接続を使うなら、DSNで指定するべきです。
http://www.php.net/manual/ja/ref.pdo-mysql.conne …

MySQLiならmysqli_set_charsetですね。
http://www.php.net/manual/ja/mysqli.set-charset. …

#ネイティブなMySQL関数はすでに非推奨なので割愛ww
    • good
    • 0
この回答へのお礼

回答ありがとうございましたー

お礼日時:2014/09/02 11:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!