2014年7月15日火曜日

Webブラウザが文字コードを判定する基準

模範解答は「HTTPにおけるContent-Typeヘッダのcharsetパラメータです」になりますが、現実はそう甘くなかったりします。

HTTP Content-Typeはサーバ側からクライアント(Webブラウザ等)にcharsetパラメータを使って、これからサーバがクライアントに返すコンテンツの文字コードを明示しますが、【これを遵守する義務はクライアントにはありません】。ですので、charsetパラメータを指定しても、これを完全無視するようなクライアントには通用しないのです。

では、サーバがクライアントに使用・解釈する文字コードを強制することは出来るのか?答え:出来ません。

一応、HTML 4.01使用ではWebブラウザが文字コードを以下の優先順位で決定することを規定しています。

1.HTTPにおけるContent-Typeヘッダのcharsetパラメータ
2.HTML中のMETA宣言、http-equivで設定された、Content-Typeのcharsetパラメータ
3.HTML文書内の各要素のchaset属性

※ 引用(一部、筆者による改訂含む)
    Webブラウザが文字コードを判定する基準は?

ですが、しつこく書きますが、【あらゆるクライアントはサーバの指示に従う義理はない】ことを忘れないで下さい。サーバから得たコンテンツの文字コードを最終的に決定するのはクライアントなのです。

とはいえ、上記の1〜3を行っている状態で、クライアントがあえて文字コードでサーバの指示を無視する理由はほとんどないですが(稀にセキュリティ上の脆弱性につながるケースがありますが)。

※参考
  http://www.geocities.jp/newtype_shira/security/webvuln.html

まとめますと、私がこのエントリーで訴えたいのは、少なくともWebシステムでは【クライアントを決して信用してはならない】ということです。この事は、私がWeb屋さん界隈で働くことになった時に、師匠が最初に教えてくれた事の一つです。(後幾つかありますが、それはおいおい)

char

0 件のコメント:

コメントを投稿