不正なHTMLコメント

ウイルスバスターに関して問い合わせたいことがあったのですが、即返答が欲しかったのでメールは却下、電話も繋がりにくそうなので、チャットを選択。

まずは入口のページ(trendmicro.ehosts.net)にアクセスし、各種項目を入力して「送信」。

チャットの営業時間内(9時30分~17時30分)にアクセスしないとフォームは現れないようです。

が、何も起きない。ソースを見ると送信ボタンが type="button" で、JavaScriptを使っている…。仕方がないのでJavaScriptを有効にして再度試してみるが、それでも反応なし

原因を調べるため、ブラウザをFirefoxに変えてアクセスしてみると、姓を入力する部分をはじめとして、全体的に表示がおかしい。

オリジナル画像
図1Firefoxでウイルスバスターのチャット画面を表示したところ

ソースを見ると、211行目にこんな記述が。

<!-- --------------------------------------------------Start of Off Hours Page By: VhaL------------------------------------------------------------------------------------ -->

これは駄目ですね。

SGMLの規定では、区切り子COM("--")およびそれに囲まれたSGML文字が「注釈」とされており、次のような解釈ができます。

  • 「Start of Off Hours Page By: VhaL」という文字列は不正な位置にある。(この文字列の前に26個のCOMが存在する)
  • 「Start of Off Hours Page By: VhaL」の文字列の後ろには43個のCOMが存在する。奇数個であることから、末尾の ">" や、その下の行に続く文字列やマークもコメント扱いになる。

また、HTML4.01の仕様書にはそもそもコメントの中には連続したハイフンを入れるべきではないと書かれています。

A common error is to include a string of hyphens ("---") within a comment. Authors should avoid putting two or more adjacent hyphens inside comments.

On SGML and HTML(www.w3.org)

結局、流れとしては次のようになっているようです。

  1. 送信ボタンを押下すると、JavaScriptが有効な環境では「checkFormFields」関数が実行される。
  2. checkFormFields関数の中で「var TimeCounter = document.counter.d2.value;」と、IDが"counter"なものを呼び出している。
  3. <form name="counter" ID="counter" > というフォームがあるのだが、これは例の不正コメントの直下にあり、コメント扱いになっているので、呼び出せずエラーになる。

…なんとなくですが、ひょっとしていまどきIEでしかチェックをしていないのでしょうか。

HTMLの仕様を理解していないエンジニアは掃いて捨てるほど居ますが、たとえ注釈宣言のルールを知らなくても、テスト段階で複数のブラウザで試してみれば「何かおかしい」ということに気づきそうなものですが…。

なお、こういう時こそ(?)IEの出番なわけでして、IE7で試してみたところ、予想どおり入ることができました。が、次の瞬間、

コンテンツは、有効なセキュリティ証明書により署名されていないため、ブロックされました。

……退出!

もう2度とチャットはしない。