開発者向けUnicode FAQ--もう知らないではすまされない

杉山貴章(オングス)
2012-02-09 11:27:00
  • このエントリーをはてなブックマークに追加

数年前にUnicodeのセキュリティが話題になってなかった?

 UTF-8には冗長性があり、1つの文字を、正規のバイト列とは異なるバイト列で表現することができてしまう。例えば、本来1バイトである文字を、2バイトや3バイトで表現できるということだ。そしてこの冗長性が文字列検査をすり抜けるための手法として利用されることがある。そのため現在はこのような冗長な表現は禁止されているが、UTF-8を処理するコードを自前で作成している場合などには注意が必要となる。

 Unicodeから他の文字コードへの変換の性質をパストラバーサルやクロスサイトスクリプティングの攻撃に利用する手法もある。Unicodeの文字と全く同じ文字が変換対象の文字コードに存在しない場合、互換性のために似た文字にマッピングされることがある。そのため、Unicodeの状態で文字列検査を通過しても、別の文字コードに変換した段階で、別の特別な意味を持った文字(例えばパス区切り文字やタグ文字など)が混入する可能性があるわけだ。

 この他に、数年前にはUTF-7がクロスサイトスクリプティング攻撃に利用できるとして話題になった。これは不正なスクリプトをUTF-7の文字列として認識させることによって、アプリケーションの文字列検査をすり抜けるという手法である。この問題はWebサーバのHTTPレスポンスヘッダを適切に設定することで防ぐことができる。

 今では当たり前のようにUnicodeが使われるようになったが、そもそもUnicodeとは何なのか、使用する上ではどのような点に注意する必要があるのかなど、一度基本に立ち返って考えてみることも重要だ。

キーワード解説一覧

Keep up with ZDNet Japan
ZDNet JapanはFacebookページTwitterbuilder)、RSSNewsletter(メールマガジン)でも情報を配信しています。

このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]