はてなブックマークを見ていたら、文字コードに起因する脆弱性を防ぐ「やや安全な」php.ini設定 というエントリを見つけた。
全て PHP で実装され、かつ日本語版は UTF-8 がデフォルトの文字コードになっているWordpress にも効果的と思い早速導入してみることにした。
エントリーはphp.iniの設定追加(変更)を前提に書かれているが、共有ホスティングの場合は、php.iniがいじれない。そこで、.htaccess に php_value/php_flag ディレクティブを指定することで、自分のwebサイトに対して、カスタムの php オプションを指定することができる機能を利用する。実際にどのように書き換えるか、簡単ではあるが役に立つかもしれないので、エントリしておく。
「.htaccess」ファイルでの設定を参考にさせてもらいながら、php.ini の書式を.htaccess 用に変更する。On/Off で設定するものについては、php_flag ディレクティブを、それ以外は、php_value ディレクティブを使用する。また、値の指定に「=」は使用しないので、空白にする。
自分が使っている、.htaccess に以下のエントリを追加。
#出力バッファリングを無効にする
php_flag output_buffering Off
#HTTPレスポンスの文字エンコーディングを設定
php_value default_charset UTF-8
#デフォルトの言語を日本語にする
php_value mbstring.language Japanese
#HTTP 入力変換を有効にする
php_flag mbstring.encoding_translation On
#HTTP 入力エンコーディング変換を UTF-8 に設定(UTF-8→UTF-8の変換)
php_value mbstring.http_input UTF-8
#HTTPレスポンスは変換しない
php_value mbstring.http_output pass
#内部エンコーディングを UTF-8 に設定
php_value mbstring.internal_encoding UTF-8
#無効な文字は「?」に
php_value mbstring.substitute_character “?”
(※元の設定項目・コメントは徳丸浩さんの文字コードに起因する脆弱性を防ぐ「やや安全な」php.ini設定 そのままです。これを .htaccess で使えるように変更したものになります。設定の詳細についてはこちらのサイトをご参照下さい。)
これを、自分の web サイトのドキュメントルートにアップロードすれば完了する。念のため、表示が正しいかどうか、確認しておいた方が良いでしょう。