【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バイト目2バイト目
8B5A
8B74
8B40
8B65
8B71

となります。ここで、誰が見ても一目瞭然なのは、1バイト目に「8B」を持つ漢字が文字化けしていることが分かります。

Windowsであれば、IMEの左の画像のような文字一覧で「8B」で始まる文字は確認できると思います。Macであれば、「ことえり」にも「シフトJISコード表」を参照すれば分かると思います。具体的には、以下の188文字になります。

1バイト目に「8B」を持つ漢字の一覧表
 0123456789ABCDEF
4
8B 40

8B 41

8B 42

8B 43

8B 44

8B 45

8B 46

8B 47

8B 48

8B 49

8B 4A

8B 4B

8B 4C

8B 4D

8B 4E

8B 4F
5
8B 50

8B 51

8B 52

8B 53

8B 54

8B 55

8B 56

8B 57

8B 58

8B 59

8B 5A

8B 5B

8B 5C

8B 5D

8B 5E

8B 5F
6
8B 60

8B 61

8B 62

8B 63

8B 64

8B 65

8B 66

8B 67

8B 68

8B 69

8B 6A

8B 6B

8B 6C

8B 6D

8B 6E

8B 6F
7
8B 70

8B 71

8B 72

8B 73

8B 74

8B 75

8B 76

8B 77

8B 78

8B 79

8B 7A

8B 7B

8B 7C

8B 7D

8B 7E

8B 7F
8
8B 80

8B 81

8B 82

8B 83

8B 84

8B 85

8B 86

8B 87

8B 88

8B 89

8B 8A

8B 8B

8B 8C

8B 8D

8B 8E

8B 8F
9
8B 90

8B 91

8B 92

8B 93

8B 94

8B 95

8B 96

8B 97

8B 98

8B 99

8B 9A

8B 9B

8B 9C

8B 9D

8B 9E

8B 9F
A
8B A0

8B A1

8B A2

8B A3

8B A4

8B A5

8B A6

8B A7

8B A8

8B A9

8B AA

8B AB

8B AC

8B AD

8B AE

8B AF
B
8B B0

8B B1

8B B2

8B B3

8B B4

8B B5

8B B6

8B B7

8B B8

8B B9

8B BA

8B BB

8B BC

8B BD

8B BE

8B BF
C
8B C0

8B C1

8B C2

8B C3

8B C4

8B C5

8B C6

8B C7

8B C8

8B C9

8B CA

8B CB

8B CC

8B CD

8B CE

8B CF
D
8B D0

8B D1

8B D2

8B D3

8B D4

8B D5

8B D6

8B D7

8B D8

8B D9

8B DA

8B DB

8B DC

8B DD

8B DE

8B DF
E
8B E0

8B E1

8B E2

8B E3

8B E4

8B E5

8B E6

8B E7

8B E8

8B E9

8B EA

8B EB

8B EC

8B ED

8B EE

8B EF
F
8B F0

8B F1

8B F2

8B F3

8B F4

8B F5

8B F6

8B F7

8B F8

8B F9

8B FA

8B FB

8B FC

8B FD

8B FE

8B FF

上の文字一覧は、当然、手動でまとめたのではなく、プログラムで作成しました。興味のあるかたは を参考にしてください。

では、なぜ「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の文字化けはセキュリティホールとの闘いの末に、多バイト文字・文化圏の文字構成をしっかりと考慮せずに誤った対処法をしてしまった結果ということになります。英語圏の世界では危険なコードも、実は危なくも何とも無い漢字の一部であったということなのです。


<<なぜ、bookmark.htm内では、「&#139;」ではなく「&amp;#139」と二重にエスケープされているのか?>>
ネットスケープ4.74〜4.76では、このセキュリティ対策のために、ページタイトルなどに使われている特殊文字、例えば「<」は「&lt;」、「>」は「&gt;」にしています。そして、「&」を「&amp;」とエスケープします。ここで、16進の「8B」とはエスケープして書くと「&#139;」であることは何度か述べました。この「&」をさらにエスケープすると「&amp;#139;」となります。これは推測ですが、ネットスケープ4.74〜4.76は、2バイト文字の片割れである「8B」をエスケープしてしまうという間違いに加えて、エスケープ処理を二重にしてしまうミスが重なり、「&#139;」が「&amp;#139」にしてしまっているのではないかと思われます(ユーザーが目にするbookmarkの表示上は「&#139;」になっているということは、本体であるbookmark.htmでは「&amp;#139;」とエスケープされていることを説明しています)。  

Windows版IEでは、「&#139;」は「」と表示されますが、ネットスケープでは「?」になります。本当は、「・amp;#139;の杜」ではなく「?の杜」でも良かったはずなのですが、何らかの理由で二重にエスケープ処理してしまっていることが、この文字化けの原因です。(面白いことに、bookmark.htmをIEなどで開いた状態で、ネットスケープでBookmarkすると文字化けは起こりますが、二重エスケープ処理は発生しません。IEによって使われているためにロックされている状態なのでしょうか?)

  左のFlashフォームは、ネットスケープ4.74〜4.76でどのようにBookmarkのページタイトルが文字化けするのかをシミュレーションするためのものです。

では、逆にBookmarkの文字化けを修復するにはどうすればいいのでしょうか? Bookmark.htmを手動で修正すれば良さそうですが、実は、文字化けを修正しても、またBookmarkにページを追加したり、あるいは編集したりしてbookmark.htmに変化があると、ネットスケープは終了時に自動的にエスケープ処理してしまい、元の木阿弥になります。


そこで、
(参照)▼ Netscape 文字化け対策
http://www.vector.co.jp/soft/win95/net/se184320.html(デッドリンク。移転先不明)
というフリーソフトをお薦めします。このソフトの凄いところは、bookmark.htmの文字化けを修正するだけでなく、netscape.exe自体を修正してしまい、セキュリティに関係のないエスケープ処理を止めさせることができるので、このソフトで修正した以降は、該当の文字をページタイトルに含むページをBookmarkしても、文字化けが発生しないことです。


<<なぜ、ネットスケープ4.6ではなかった問題が4.74〜4.76では起こるのか?>>
たしかにネットスケープ4.74〜4.76の文字化けは困り者ですが、ではネットスケープ4.6なら問題ないかといえば、そうでもありません。文字化けはしないものの、Bookmarkのエスケープ処理が全くされていないため、例えばタイトルタグに危険なJavascriptコードなどが書かれており、それを知らずにbookmarkした人が、「bookmark.htm」をブラウザで開くと、Javascriptが実行される危険性があります(Bookmarkをスタートページに設定している人も少なくないでしょうから、これは十分にありえます)。ネットスケープ4.Xがインストールされているディレクトリー名(ユーザー名はdefaultの場合もあるでしょうし、カスタマイズしている場合もありますね)を悪意の人間が管理するリモートサーバに送信させることも可能ですから、かなり危険そうです。

そう思っていたら、やっぱりこのネットスケープ4.6などのBookmarkの脆弱性は既に報告されていました。その脆弱性を体験できる海外サイト。

(参照)▼(タイトルにJavascriptが含まれているため敢えて伏せます)
http://www.nat.bg/%7Ejoro/book2.html
※Netscape4.6などでは、これらのJavascriptコードもエスケープしないために、このようなページをbookmarkしてしまうとBookmarkの中身が悪意のある人間にバレバレになります(上記サイトはデモなので、実際にはBookmarkの中身をリモートに送信したりされる心配はありません。alertで自分にだけ表示されるだけです。心配な方は、上記サイトにアクセス後、HTMLソースのタイトルタグの部分を確認してください)。恥ずかしいサイトをBookmarkしている人にとっては死活問題です。(もちろん、怪しいタイトルのページはBookmarkしないというのでも対策にはなりますが、ネットスケープの場合、「Bookmarkに保存」を選んでも確認画面が表示されないので、気がつかないうちにbookmarkしてしまう可能性がありますね。)

このようなセキュリティホールを塞ごうと対策し、結果的には処理が不適切であった結果が、この章で取り扱った「ネットスケープ4.74〜4.76のBookmark文字化け」であったと思われます。

次のページでは、「Javascriptの外部ファイル内でdocument.writeしたら文字化け(Mac版IE4.5編)」という現象を考えてみます。