WebアプリケーションからのSET NAMESは危険
yohgaki's blog「SET NAMESは禁止」
http://blog.ohgaki.net/set_namesa_mcb_asc
引用---
APIを利用したデータベース接続は現在の文字エンコーディング設定を各接続情報としてメモリ内に保存しています。APIのエスケープ関数はこの情報をエスケープの際に利用します。
SET NAMESによって文字エンコーディングを変更するとC言語などで書かれたエスケープAPI (libmysql, libpqなど)が想定しているエンコーディングと実際のエンコーディングが異なる状況が発生します。この違いにより、環境によっては文字エンコーディングを利用したSQLインジェクション攻撃が可能になります。
---
SET NAMESを使わない方法。
■PHP
mysql_set_charset('utf8');
■Ruby
mysql = Mysql.init mysql.options(Mysql::SET_CHARSET_NAME, 'utf8') mysql.real_connect('host', 'user', 'password', 'database') mysql.query('SET NAMES utf8')