0

サイトでユーザー提供の JavaScript を実行したいのですが、その前に、提供された JavaScript ソースが一連のルールに従っているかどうかを (アルゴリズム的に) チェックする必要があります (eval() 関数を使用しない、setTimeout()/setInterval() 関数を使用しないなど)。 .)。

さらに良いことは、ソースが有効かどうかを確認することです。サーバー側で実行されるため、このためのツールは何でもかまいません。これに役立つアイデアはありますか?

編集: コードは Web ワーカー環境で実行されます

4

3 に答える 3

2

ソース コードをスキャンするだけでは、スクリプトが禁止されている機能を使用するかどうかを判断することはできません。スクリプトが実行される環境を変更しました。

あなたがしていることは、単純なテキスト検索ではありません。JavaScript は非常に動的な言語であり、ソース コードにその関数の名前がまったくなくても、「禁止されている」関数を効果的に呼び出すことができます。

window['e'+'v'+'a'+'l']

また、すべてのコード パスをヒットすることはできないため、単純にスクリプトを実行してアクセスされた関数を追跡することもできません。

特定の関数の使用を禁止するには、それらの関数が存在しないサンドボックスでコードを実行する必要があります。

于 2013-01-03T03:06:24.920 に答える
1

サーバー側で (Node.js や Rhino などで)実行している場合は、グローバル名前空間を制御できます。取り出してevalください。setTimeout

于 2013-01-03T03:08:39.670 に答える
0

JavaScript が Web ブラウザーで実行されている場合は、iframe 内の別のドメイン (「exampleusercontent.com」) から読み込まれたページで実行します。次に、window.postMessage()を使用して、親ウィンドウ (「example.com」から) との通信を許可します。これは、多かれ少なかれ Facebook アプリが機能する方法です。

残念ながら、信頼できない JavaScript は、ユーザーを別の Web サイトにリダイレクトしたり、ユーザーのブラウザーをハングさせたりすることができます。ただし、「example.com」にコードを挿入したり、ユーザーの「example.com」Cookie を盗んだりすることはできません。

あなたが考えている方法で特定の機能を実際に禁止するために、Google Cajaはサードパーティの JavaScript をサンドボックス化するためのオープンソース コンパイラですが、時折誰かが脆弱性を発見しています。

于 2013-01-03T03:34:18.833 に答える