ユーザーアップロードされたhtml5キャンバスアニメーションを徹底的にフィルタリングするために、JS w/PHPにコンパイルされたJSのWebアプリケーションのプログラミング言語を作成しますか?

A persistent follow-up of an admittedly similar question I had asked: What security restrictions should be implemented in allowing a user to upload a Javascript file that directs canvas animation?

私はJSがまともであることを知っていると思っていると思うのですが、XSSのすべての例で共通の文字が表示されています。私は安全で健全な、合理的にプログラムされたシステムをバイパスできる良いXSSの例が欠けている。私は人々に自分のサイトにhtml5キャンバスの作品をアップロードさせたい。このようなサイトはまだありますか?人々はこれについていつも怖がっているようですが、あなた自身のために楽しいことをしたいと思ったら、サーバーに何か起きたら、それはちょうどアニメーションサイトであり、情報は爆発のように周囲に広がっています。私は彼らにサインアップしないよう伝えます。

私がJSで書かれた私のプログラミング言語のためのJSを使ってIDEとして機能する単一のテキストエリアフォームフィールドを許可し、JSにコンパイルする前にユーザーの構文の文字列置換、フィルタリング、および検証をPHPでエコーする私はそのコンテンツを主催することができますか?サーバー側も考慮して、どのように組み合わせたすべての考慮事項をバイパスできるかを教えてください:

  • JavaScriptが無効になっている場合、POSTが通過しないようにし、ユーザーセッションを常に追跡します。
  • クラスを名前空間にするため、関数とメソッドにEXAMPLEというプレフィックスのみを付けることができます。
  • インスタンスを作成する
  • 私のJS Frameworkを外部(ブラウザでは不変)のJSファイルに保存します。これは受け付けるフォーム内の単一のtextareaフィールドのページの先頭にある必要があります。また、サーバー生成のキーそれはそれに続く必要があります。コンパイルされたユーザーがアップロードしたキャンバスのゲーム/アニメーション(1ページにつき1つのみ)をホストするページで、サーバーは残りの部分をエコーする前に正しいJSファイル名文字列を確認します。
  • 外部スクリプト呼び出しはありません!クライアントとサーバーの文字列置換
  • 英数字、ダッシュ、アスタリックのみを許可する
  • アラート、eval、ウィンドウ、XMLHttpRequest、プロトタイピング、クッキー、明らかなものを削除する。ネイティブJSの予約語や構文はありません。
  • IDEに役立つ他の外部JSファイルを難読化し、縮小し、プログラミング言語の一意のCanvas APIメソッドを認識させる。
  • Windowがアンロードされると、POSTでサーバーがチェックする2つの動的生成フォームフィールドに外部JSコードを格納します。すべての元のコードは、フィルタリングの目的で完全にDBに登録されます。
  • 厳密な変数命名規則( 'example-square1-length PROPERTY '、 'example-circle-spin 方法')
  • Copy/Paste Disabled、setIntervalは、ユーザが有効になっているかどうかを常にチェックします。そうであれば、ブロックをデータベースにトリガーし、直ちにwindow.locationを変更し、POSTを介してセッションIDをチェックして、JSがその期間内に無効になった場合に確認します。

つまり、私はそれをすることができますか? HEXやASCIIを使用することができない場合、どのようにして害を及ぼすことができますか?

1
だから待って、人々はあなたのサイトにhtmlをアップロードして、あなたはそれを表示していますか? xssの定義を理解していますか?
追加された 著者 rook,
「これを行うサイトはまだありませんか? - jsfiddle.net は明らかな例です。 hascanvas.comsketchpad.cc これをprocessing.jsに対して行います
追加された 著者 nrabinowitz,
あなたは完全にJavaScriptを無効にしたいですか?
追加された 著者 galchen,

2 答え

htmlprufier consists of thousands of regular expressions that attempt "purify" html into a safe subset that is immune to xss. This project is bypassesed very few months, because it isn't nearly complex enough to address the problem of XSS.

XSSの複雑さを理解していますか?

JavaScriptが文字または数字なしに存在できることをご存知ですか?

さて、私が試してみたいのは、IEでレンダリングされている UTF-7 と言ってもわからないエンコードを変更するメタタグを挿入することです。このutf-7 enocded htmlの中にはjavascriptが含まれています。あなたはそれを考えましたか?まあ、 10万数百万の間に、私が考えていなかった他のベクターがあるかどうかを推測します。

XSSのチートシートは、私の祖父母がそれに耐えられるほど古いものです。 最新バージョンがあります。

(あなたが根本的に安全でないことをしようとしているため、あなたはハッキングされるでしょう。)

1
追加された
@thomasrutterあなたはjavascirptの安全なサブセットが入手するのがさらに難しいことに同意しますか?
追加された 著者 rook,
@thomasrutterいいえ、それを達成するために TRY します。ハッキングの全ポイントは、すべての条件を停止しないことを証明しています。あなたの声明は、あなたが概念の証明を書いていないことを示しています。
追加された 著者 rook,
htmlpurifierは HTML を浄化するためのもので、すべてのスクリプトを削除します。もしそうなら、それは助けにならないでしょう。
追加された 著者 thomasrutter,
はい、 CAJAAdSafe がそれを達成しました。
追加された 著者 thomasrutter,
私は本当にあなたがここで何を言っているのか分からない。あなたはCAJAとAdSafeのセキュリティモデルに対する議論をしていますか?
追加された 著者 thomasrutter,

他にもいくつかの選択肢があると思います。

実際のXSSテストでは、 XSSチートシートHTML5セキュリティチートシート(最新版)しかし、その問題は、Javascriptを許可し、悪い Javascriptを許可したくないということです。これは、すべてのスクリプトを防止することによって、XSSを防止する通常の方法とは異なる、より複雑な目標です。

別のドメインにホスティング

これはiframe jailと呼ばれています。

XSS攻撃の目標は、サイトと同じコンテキスト(つまり、同じドメイン上)でコードを実行できるようにすることです。これは、コードがそのドメインのCookieを読み取り、設定したり、ユーザーの操作を促したり、デザインを修正したり、リダイレクトしたりすることができるからです。

しかし、サイトに2つのドメインがあり、信頼できないユーザーがアップロードしたコンテンツのみをホストするドメインが2つある場合、そのコンテンツはメインサイトから隔離されます。 iframeに含めることはできますが、サイトのCookieにアクセスすることはできませんし、iframe外のデザインやリンクを修正するアクセス権もなく、メインウィンドウのスクリプト変数にアクセスすることもできません(別のドメインにあります)。

もちろん、クッキーを好きなだけ設定することも、設定したクッキーを読み返すこともできます。しかし、これらはあなたのサイトのクッキーからまだ隔離されています。メインサイトのCookieに影響を与えたり、読み取ったりすることはできません。また、ポップアップウィンドウのようなユーザーの迷惑をかける可能性のある他のコードも含まれている可能性があります(if-iframeのUIで提供されるコンテンツが視覚的に明確になる必要があります)あなたのサイトの一部)。しかし、これはあなたのメインペイロードからサンドボックスされています。ここでは、パーソナルペイロードを所有しています。セッションクッキーと重要なページデザインとスクリプトの整合性が保持されています。それはあなたがiframeに埋め込むことができるインターネット上のどのサイトよりも少なくないが、リスクはない。

Javascriptのサブセットを使用する

Javascriptのサブセットが提案されています。これは、スクリプトのコンパートメント化を提供します。信頼できないコードをロードし、そのスコープに他のコードを変更したりアクセスしたりすることができないようにします。

Google CAJA のようなものを探します。その目的は、そのタイプのサービスを正確に有効にすることですあなたは説明しました:

Cajaを使用すると、ウェブサイトからDHTML Webアプリケーションを第三者から安全に埋め込むことができ、埋め込みページと組み込みアプリケーションの間の豊富な相互作用が可能になります。オブジェクト機能のセキュリティモデルを使用して柔軟なセキュリティポリシーを幅広く提供することで、組み込みアプリケーションのユーザーデータの使用を効果的に制御し、ガジェットがガジェットのUI要素間の干渉を防止できるようにします。

ここでの問題の1つは、コードを提出する人がCAJA APIを使用してコードを提出する必要があるということです。それでも有効なJavascriptですが、CAJAのAPIがアクセスを仲介するので、ブラウザのDOMにアクセスすることはできません。これにより、既存のコードを移植することが難しくなります。コンパイル段階もあります。 Javascriptはセキュアな言語ではないので、コードがパーサーを通さずにDOMや他のグローバル変数にアクセスできないようにする方法はありません。そのため、CAJAはJavascript入力からJavascript出力にコンパイルし、セキュリティモデルを強制します。

0
追加された
Dude xssのカンニングシート? 1999年のように更新されたのではないでしょうか?
追加された 著者 rook,
明らかに、そのページで何も試していない場合、その大部分は機能しません。例えば、 src = javascript:alert(1)のようなものは修正されています。
追加された 著者 rook,
2006年頃のように見えますが、それでも私が知っている最高のものです。あなたはより包括的な近代的同等物を知っていますか?私はそれで私の答えを修正するだろう。
追加された 著者 thomasrutter,
あなたはルークを知っています、あなたは本当に素敵な人のようです。
追加された 著者 thomasrutter,
JavaScript - 日本のコミュニティ
JavaScript - 日本のコミュニティ
2 参加者の

日本人コミュニティのjavascript