10

NodeタイプのDOMがTextブラウザによってHTMLとして解釈されないことが保証されているかどうかを知っている人はいますか?

詳細は次のとおりです。

バックグラウンド

私は友人のために簡単な Web コメント システムを構築しており、XSS 攻撃について考えています。HTML タグのフィルタリングやエスケープは、非常に洗練された解決策ではないと思います。フィルターをすり抜けてしまう畳み込みを考え出すのは簡単すぎます。基本的な問題は、特定のコンテンツ (つまり、認証されていない Web ユーザーが無作為に POST するコンテンツ) について、ブラウザーがコンテンツを解釈または実行しようとしないことを保証したいということです。

プレーン(テキスト)の開始

頭に浮かんだ最初の考えは、単に を使用することContent-Type: text/plainですが、これはページ全体に適用する必要があります。ページの途中にプレーンテキストを配置することはできますがIFRAME、見苦しく、ユーザーがフレームをクリックするとフォーカスの問題が発生します。

innerText/textContent/JQuery

innerTextブラウザー固有 ( IE、textContentFF、Safari など) の属性がいくつかあることが判明しました。これらの属性を設定すると、単一のTextノードを作成する必要があります。

text(val)JQuery は、ブラウザー固有の属性をスキップして に直接移動する単一の関数を実装することにより、ブラウザー固有の属性の違いを回避しようとします。document.createTextNode(text)これは、ご想像のとおり、ノードを作成しTextます。

Text NodeW3 DOM

これは私が望むものに近いと思います。見た目は良いです。Textノードは子を持つことができず、HTML として解釈できないように見えます。しかし、公式ドキュメントからは 100% 確信が持てません。

の部分textContentは、「設定時に解析も実行されず、入力文字列は純粋なテキスト コンテンツとして取得される」と記載されているため、特に励みになります。しかし、これはすべてのノードの基本ですかText、それとも設定したノードのみtextContentですか? これはおそらくばかげた言い訳のように思えますが、IE はサポートしていないためtextContent(上記を参照)、これは重要なことかもしれません。

最初の質問に戻る

これが機能することを誰でも確認/拒否できますか? つまり、w3 DOM 準拠のブラウザーは、コンテンツが何であれ、ノードを HTML として解釈しないということですか? Textこの苦しむ小さな不確実性が解決されたことに、私は非常に感謝しています。

お時間をいただきありがとうございます!

4

2 に答える 2

6

はい、これは確認されていますが、これまでにないブラウザであったとしても、そのブラウザには重大な欠陥があるということです。テキスト以外のものをレンダリングするテキスト ノードは矛盾します。document.createTextNode("some string"); を使用して そのノードを追加すると、文字列はテキストとしてレンダリングされることが保証されます。

于 2009-01-24T22:58:35.323 に答える
0

HTML タグのフィルタリングやエスケープは非常に洗練された解決策ではないと思います。フィルターをすり抜けてしまう畳み込みを考え出すのは簡単すぎます。

> から > へのフィルタリングはまったく正しくありません。および < から < HTML インジェクションを完全に停止します。

于 2009-01-24T22:52:53.167 に答える