スレッドメモ
MLやNewsのスレッドをメモする試み。
2006-08-31 (木)
◆ [memo] IE における "expression" の過剰検出による XSS の 誘因
[9096] HASEGAWA Yosuke (8/31)
Internet Explorer にて、スタイルシートにおける JavaScript の埋め込みに 利用する "expression" という記法について、IE の "expression" という語の 検出方法が広いため、Web アプリケーション開発者の想定を超えた範囲で JavaScriptが実行され、XSS の原因となることがあります。
適切なフィルタリングのためにはWebアプリケーション開発者への広い通知 が必要なことから、本問題を公開するべきだと判断しましたので、以下をご参 考ください。
[9102] TAKAGI, Hiromitsu (9/5)
拝見しましたが、「Webアプリケーション開発者は」という表現は、あたかも それがWebアプリケーション開発に通常必要とされるノウハウであるかのよう な印象を与えていると思います(たとえば、 http://www.st.ryukoku.ac.jp/%7Ekjm/security/memo/2006/09.html#20060904_expression の反応など)が、そもそも、
フィルタリングによってスクリプトを除去したHTML断片をWebに動的出力し ようとする設計
自体が不適切であることを常識化すべきです。
たとえば、phpBBの「BBCode」などのように別の記法を用意してその仕様に基 づいた出力をする設計を採用するか、極めて限定された要素、属性のみ許可す る設計とするか、あるいは、WebメールのようにHTMLからどうしても離れられ ないアプリケーションの場合には、スクリプトが作動しても問題の生じない設 計にする(Googleの「cache」のように他のドメインのページに表示させる方 法など)べきです。
[9104] SAKIYAMA Nobuo (9/5)
> ただ、開発者側の言い分によると、
> 「競合他社のサービスとの、ユーザの使い勝手の向上を図ると
> どうしてもいくつかのタグを許可せざる得ない」
> 状況のようです。タグはみんな「許可せざる得ない」というほど危険かというとそういうもので もないですよ。
安全なHTMLサブセットを定義してスキーマ(DTDベースのものでも、Relax-NGや XML Schema のようなXMLベースのものでもよい)に書き下しておいて、(必要が あれば適宜wrapしてから)入力をXML validator にかけて、エラーが出たらフィ ルタをかけるのではなくて「入力を拒否してやり直しさせる」、という手が blog や CMS であれば使えます(Web mailでは無理ですが)。
[9106] TAKAGI, Hiromitsu (9/5)
その方法はまだ危ないところがあるかもしれないと思いますがどうですかね。 XML Validatorを通るけども、ブラウザの実装が変なためにスクリプトが動く 解釈をされてしまう場合があるかもしれない(文字コード解釈やその他の何が しかが、ブラウザとXML Validatorとで別実装になっているのが原因とか)と 考えると、一旦DOMツリーを構成して、DOMツリー操作APIで削除(ないし validate)して、テキスト化APIで展開するという方法をとるという方法が使 われると思うのですが、これに対しては、重すぎるから採用したくないという 声を耳にします。
> 安全なHTMLサブセットを定義してスキーマ(略)に書き下しておいて、
そのような定義ファイルがあればよいのですが、メンテナンスされているもの はありますかね。