【PR】 眉毛の育毛剤「アイブロウエッセンス」 【PR】 最大75Mbps イーモバイル LTE 商品券付 即日発送 【PR】 生活用品もネットで探す時代です 【PR】 良品社中・代理店募集 |
||||||
ネットスケープ4.74〜4.76のBookmarkの文字化けについてIEでは「お気に入り」と呼びますが、ネットスケープでは「Bookmark」と呼びます。このネットスケープの「Bookmark」で、左のキャプチャー画像のように、特定のバージョン・特定の漢字で文字化けする現象があります。あなたのサイトもこれらの漢字を含んでいるならば、文字化けに驚いたユーザーから問い合わせがあるかもしれません。Webmasterとして知っておいて損はしないでしょう。まず、この文字化けの原因を考えるために、この文字化けの特徴を考察してみます。まず、文字化けしているところは、「‹」という文字に置き換わっていることはすぐに分かります。次に、元の文字を推察します。
であることは、多少、勘を働かせれば分かっていただけると思います。これらの文字の共通点は? そう、「キ」です。「ネットスケープ4.Xで、document.writeを使っている場合の文字化け」の章では「シ」が犯人でしたが、今回は「キ」が犯人のようです。 具体的に関連性を見出すために、「技」「逆」「機」「菊」「客」のShift_JISコードを調べてみます。調べ方はいろいろありますが、ここではURLエンコードを利用してみます。下記のFlashフォームで調べてみます。 例えば、「技」なら「%8BZ」となります。これにより1バイト目が「8B」、2バイト目が「5A」(ASCIIコードにおいて「Z」は16進で「5A」なので。)と分かります。同様に、「逆」は「%8Bt」となりますから、1バイト目が「8B」、2バイト目が「74」(ASCIIコードにおいて「t」は16進で「74」)になります。さらに、調べていくと、
となります。ここで、誰が見ても一目瞭然なのは、1バイト目に「8B」を持つ漢字が文字化けしていることが分かります。
Windowsであれば、IMEの左の画像のような文字一覧で「8B」で始まる文字は確認できると思います。Macであれば、「ことえり」にも「シフトJISコード表」を参照すれば分かると思います。具体的には、以下の188文字になります。
|
上の文字一覧は、当然、手動でまとめたのではなく、プログラムで作成しました。興味のあるかたは
を参考にしてください。 では、なぜ「8B」が「‹」に化けるのでしょうか? それは「8B」という16進数は10進数では、「139」(=8×16+B=128+11=139)だからです。つまり、ネットスケープ4.74〜4.76は「8B」という文字コードを見るや、本当は2バイト文字の一部であるにもかかわらず、エスケープ処理をしてしまっているのです。 1バイト目が「8B」の場合にこのようなエスケープ処理が発生し、文字化けが発生するということは、2バイト目が「8B」の場合はどうなんでしょうか? 早速調べてみましょう。
°kルщ級糾給旧牛去居巨拒拠挙渠虚許距漁禦魚亨享京 上の文字の中で、前から5つ目の「(有)」を一文字にしたもの、及び、最後尾の4つの漢字は機種依存文字になります。(Macの方ごめんなさい。)例えば、「ル」や「窓」、「爆」が文字化け対象文字になっていますから、テストしてみましょう。 右のキャプチャー画像が示すように、「窓の杜→‹の杜」「ルパン3世→‹パン3世」「江戸幕府→江戸‹府」のように文字化けしていることが分かります。 では、なぜ、「8B」をエスケープしているのでしょうか? それを考えるためには、ネットスケープ4.74〜4.76のBookmarkの本体を探してみます。本体は、Windows版の場合「"C:\Program Files\Netscape\Users\ユーザー名\bookmark.htm"」です。つまり実体はただのHTMLファイルだったのです。そして、このHTMLファイルはインターネットではなく、ローカル・つまりユーザー側に存在します。ですから、このHTMLファイルを介して何かを実行できるとしたら、これはユーザー権限で実行されることになり、要は何でもし放題になってしまいます。ここにセキュリティホールが発生する余地があるわけです。 まさしく、このネットスケープ4.74〜4.76のBookmarkの文字化けはセキュリティホールとの闘いの末に、多バイト文字・文化圏の文字構成をしっかりと考慮せずに誤った対処法をしてしまった結果ということになります。英語圏の世界では危険なコードも、実は危なくも何とも無い漢字の一部であったということなのです。
Windows版IEでは、「‹」は「」と表示されますが、ネットスケープでは「?」になります。本当は、「・amp;#139;の杜」ではなく「?の杜」でも良かったはずなのですが、何らかの理由で二重にエスケープ処理してしまっていることが、この文字化けの原因です。(面白いことに、bookmark.htmをIEなどで開いた状態で、ネットスケープでBookmarkすると文字化けは起こりますが、二重エスケープ処理は発生しません。IEによって使われているためにロックされている状態なのでしょうか?)
そこで、 (参照)▼ Netscape 文字化け対策 http://www.vector.co.jp/soft/win95/net/se184320.html(デッドリンク。移転先不明) というフリーソフトをお薦めします。このソフトの凄いところは、bookmark.htmの文字化けを修正するだけでなく、netscape.exe自体を修正してしまい、セキュリティに関係のないエスケープ処理を止めさせることができるので、このソフトで修正した以降は、該当の文字をページタイトルに含むページをBookmarkしても、文字化けが発生しないことです。
そう思っていたら、やっぱりこのネットスケープ4.6などのBookmarkの脆弱性は既に報告されていました。その脆弱性を体験できる海外サイト。
(参照)▼(タイトルにJavascriptが含まれているため敢えて伏せます) このようなセキュリティホールを塞ごうと対策し、結果的には処理が不適切であった結果が、この章で取り扱った「ネットスケープ4.74〜4.76のBookmark文字化け」であったと思われます。 次のページでは、「Javascriptの外部ファイル内でdocument.writeしたら文字化け(Mac版IE4.5編)」という現象を考えてみます。
|