4

クライアント側のサニタイズを行うべきではないと誰もが私に言う前に (SSJS でも機能する可能性がありますが、実際にはクライアントで行うつもりです)、私が何をしようとしているのかを明確にさせてください。

Google CajaHTMLPurifierに似たものですが、JavaScript の場合: HTML と CSS を処理するホワイトリスト ベースのセキュリティ アプローチ (もちろん、まだ DOM に挿入されていないため、安全ではありませんが、最初に文字列形式で取得されます)次に、安全でないタグまたは属性を選択的に除外し、それらを無視するか、オプションでエスケープされたテキストとして含めるか、理想的にはコンテキストで、さらに処理するためにそれらをアプリケーションに報告できるようにします。Google Caja のように、JavaScript を安全なサブセットに減らすことができれば素晴らしいと思いますが、それでは多くのことが求められることはわかっています。

私のユース ケースは、 JSONP経由で取得した信頼できない XML/XHTML データ(Wiki 処理前の Mediawiki ウィキからのデータ。これにより、未加工の信頼できない XML/HTML 入力を許可する) にアクセスし、ユーザーがそのデータ (XQuery、jQuery、 XSLT など)、HTML5 を利用してオフラインでの使用、IndexedDB ストレージなどを可能にし、ユーザーが入力ソースを表示してクエリを作成またはインポートした同じページで結果をプレビューできるようにします。

ユーザーは自分が望む出力を生成できるので、ユーザーが行っていることをサニタイズするつもりはありません。JavaScript をページに挿入したい場合は、すべての権限がユーザーに与えられます。しかし、安全でない入力をコピーすることを禁止しながら、信頼できない入力から対象の要素を安全にコピーするコードを追加できるという自信を持ちたいユーザーを保護したいと思います。

これは間違いなく実行できるはずですが、すでにこれを行っているライブラリがあるかどうか疑問に思っています。

innerHTMLそして、これを自分で実装するのに行き詰まっている場合 (どちらの場合も興味があります)、ドキュメントへの挿入前に DOM の作成/追加を使用することがあらゆる点で安全であるかどうかを証明したいと思います。たとえば、生の HTML を挿入されていない div に追加するためにDOMParser使用して、ブラウザーの HTML 解析を最初に実行または依存した場合、イベントが誤ってトリガーされる可能性はありますか? innerHTML私はそれが安全であるべきだと信じていますが、悪用される可能性のある挿入の前にDOM操作イベントが何らかの形で発生する可能性があるかどうかはわかりません.

もちろん、構築された DOM はその時点でサニタイズする必要がありますが、トラバーサルを容易にするために DOM オブジェクト自体を安全に構築できることを確認し、不要な要素、属性、および属性値を除外することについて心配したいだけです。

ありがとう!

4

1 に答える 1

2

ESAPI の目的は、開発者が必要とする可能性が高いすべてのセキュリティ機能を、明確で一貫性のある使いやすい方法で提供する単純なインターフェイスを提供することです。ESAPI アーキテクチャは非常に単純で、ほとんどのアプリケーションが必要とする主要なセキュリティ操作をカプセル化するクラスのコレクションにすぎません。

OWASP ESAPI の JavaScript バージョン: http://code.google.com/p/owasp-esapi-js

入力の検証を効果的に行うのは非常に困難です。HTML は、コードを配置できる場所が非常に多く、さまざまな有効なエンコーディングが存在するため、史上最悪のコードとデータのマッシュアップです。HTML は階層的であるだけでなく、さまざまなパーサー (XML、HTML、JavaScript、VBScript、CSS、URL など) を含んでいるため、特に困難です。入力の検証は重要であり、常に実行する必要がありますが、インジェクション攻撃に対する完全なソリューションではありません。主な防御策としてエスケープを使用することをお勧めします。私はこれまで HTML Purifier を使用したことがありませんでしたが、見栄えがよく、確かに多くの時間を費やして検討してきました。最初にソリューションサーバー側を使用してから、その後に必要な追加のルールを適用してみませんか. 私'[ ] ( )でコードを記述します。XSS (クロス サイト スクリプティング) チート シートおよびThe Open Web Application Security Project (OWASP)には、さらに何百もの例があります。DOM ベースの XSS 防止チート シートで注意すべき点がいくつかあります。

HTML Purifier は、この混合エンコーディング ハックをキャッチします。

<A HREF="h
tt  p://6&#9;6.000146.0x7.147/">XSS</A>

そして、Unicode XSSエクスプロイトを使用したこのDIV背景画像

<DIV STYLE="background-image:\0075\0072\006C\0028'\006a\0061\0076\0061\0073\0063\0072\0069\0070\0074\003a\0061\006c\0065\0072\0074\0028.1027\0058.1053\0053\0027\0029'\0029">

あなたが直面していることの一部: HTML と JavaScript で文字 "<" の可能な 70 の組み合わせすべて

<
%3C
&lt
&lt;
&LT
&LT;
&#60
&#060
&#0060
&#00060
&#000060
&#0000060
&#60;
&#060;
&#0060;
&#00060;
&#000060;
&#0000060;
&#x3c
&#x03c
&#x003c
&#x0003c
&#x00003c
&#x000003c
&#x3c;
&#x03c;
&#x003c;
&#x0003c;
&#x00003c;
&#x000003c;
&#X3c
&#X03c
&#X003c
&#X0003c
&#X00003c
&#X000003c
&#X3c;
&#X03c;
&#X003c;
&#X0003c;
&#X00003c;
&#X000003c;
&#x3C
&#x03C
&#x003C
&#x0003C
&#x00003C
&#x000003C
&#x3C;
&#x03C;
&#x003C;
&#x0003C;
&#x00003C;
&#x000003C;
&#X3C
&#X03C
&#X003C
&#X0003C
&#X00003C
&#X000003C
&#X3C;
&#X03C;
&#X003C;
&#X0003C;
&#X00003C;
&#X000003C;
\x3c
\x3C
\u003c
\u003C
于 2011-04-14T15:58:06.660 に答える