SyntaxHighlighter

2011年9月25日日曜日

ブラウザから送られてくるフォームデータの文字コードを検証する

ブラウザから送られてくるフォームデータの文字コードは何になるのか。

軽くググってみた限りでは、そのフォームがあるHTMLファイルの文字コードになることが暗黙の了解的に書かれていて、(常識だからなのか?)そういう仕様である、と明記してあるものは見つけられませんでした。これ以上ググるのもめんどくさいので、自分で検証してみました。

検証用サイト(別窓で開きます)

検証用サイトは PHP で作りました。
フォームの HTML は ASCII のみで記載し、メタタグの charset 指定をリンクで切り替える仕様になっています。 textarea に日本語を記載して submit すると、mb_detect_encoding 関数で判定した結果を画面表示します。

試した環境は、Windows XP の IE 8 と Firefox 6.0.2 。
結果は以下の通り。まぁ予想通りですね。

  • メタタグで charset 指定している場合は、その文字コードで送信される
  • メタタグに charset 指定がない場合は、Shift_JIS で送信される(OSのデフォルト文字コード?Mac や Linux ではどうなるのか?誰か試して結果を教えてください・・・)
  • メタタグの charset 指定を無視して手動でブラウザの表示文字コードを変えると、変更後の文字コードで送信される

ちなみに上記の検証用サイトは、今回の検証の趣旨とは関係ないですが、mb_detect_encoding の誤検知っぷりテストにも使えます。フォームの charset を EUC-JP にして、textarea に 製造 と入れて submit すると、UTF-8 と表示されます。 やはりセキュアなアプリを目指すには、自動検出はしてはいけないですね。 きちんと charset 指定していれば、その文字コードで送られてくると確認できたので、正規のフォームから送られてくるデータを想定した場合、自動検出を使う必要はない。百害あって一利なしです。

※異なる環境で試していただけた方いましたら、是非コメントでお知らせください。

0 件のコメント:

コメントを投稿