2016-08-03 24 views
1

私たちは、ファイアウォールの背後にあり、CAS認証層の背後にあるアプリを持っています。特別な役割を持つユーザーは、実行時にアプリケーションに挿入されるJavaScript関数を記述することで、アプリケーションの動作方法をカスタマイズすることができ、ボタンのクリックやページの読み込みなどのイベントによって起動することができます。 (JSは "eval"ではなく、ページサーバー側に書き込まれます)JavaScriptを挿入できるアプリを保護するにはどうすればよいですか?

言うまでもなく、この機能はセキュリティの問題を引き起こします。

ファイアウォール、b)強力な認証、c)認可を超えて、これを保護するために既に行われていることを超えた推奨事項がありますか?

EDIT: コメントの質問に応じて: 1.注射されたコードは、アプリケーションの一部になるか、独立したアプリケーション(分離されたコンテキスト)として実行されますか? はい、アプリケーションの一部になります。現在は、サーバーサイドに挿入されてスクリプトタグに挿入されます。

  1. JavaScriptは、オリジナルのライター以外のクライアントのブラウザでも実行されますか? はい。それは永続化され、その後のすべての要求に挿入されます。

(アプリケーションがRESTfulな呼び出しによってアクセスされる一般的なバックエンドのデータストアに対してカスタムアプリケーションを構築するための「エンジン」と考えることができます。各カスタムアプリケーションはカスタムの独自のセットこれらJavaScriptを持つことができます)

+0

注入されたコードは、アプリケーションの一部になるか、独立したアプリケーション(分離されたコンテキスト)として実行されますか? – FDavidov

+0

挿入されたJavaScriptは、オリジナルのライター以外のクライアントのブラウザで実行されますか? –

答えて

3

あなたは本当に任意のJavaScriptを受け入れるべきではありません。理想的には、JavaScriptが送信されたものをトークン化し、すべてのトークンが有効なJavaScriptであることを確認することが理想的です(これは以下のシナリオすべてに当てはまります)。

その後、送信されるJavaScriptが機密情報にアクセスしないことを確認する必要があります。最後の部分は、難読化コードで検証することが極めて困難または不可能でさえあることができ、あなたはあなたがどのくらいの検証に関係なく、これは本質的に安全練習であることを考慮する必要があるかもしれ

。限り、あなたは、以下のことが通常であるより少しより安全に、この処理を行うためのいくつかの提案であることを理解として:@FDavidov has mentionedとして

  • 、あなたはまた、アプリケーションサンドボックスその中の一部として実行されているからJavaScriptを制限することができスタックスニペットのように別のコンテキスト。

  • もう1つの選択肢は、JavaScriptを機能の定義済みホワイトリスト(一部は実装済みかもしれない)とグローバルに制限することです。コースプリミティブ、コントロールフロー、およびユーザー定義の関数定義を除いて、DOMまたはグローバルと直接対話できないようにしてください。この方法は、ホワイトリストがどれほど堅牢に施行されているかによっていくつかの成功を収めています。 Here is an example that uses this method in combination with the method below

  • また、これが可能であった場合は、コードの元の作成者以外のマシンでコードを実行しないでください。これは、基本的にUserscriptのような機能をアプリケーションの適切な場所に移動することになりますが(私は正直言ってそれを見ていません)、クライアントのブラウザで実行できるようにするよりも安全です。

+0

ありがとうパトリック。私はアプリを継承しています。私たちはこれらのアプローチのいくつかについて話しましたが、たくさんのスクリプトがすでに書かれていますが、あなたが指摘していることをすべて避けなければなりません!あなたの反応は、将来のコースのチャート作成に非常に役立ちます。しかし、ありがとうございます! – blogofsongs

+0

@blogofsongs問題ありません。あなたの編集に基づいて、2番目の箇条書きがあなたの特定の事例に最も役立つようです。ホワイトリストに 'Object'や' String'などのものが含まれていないことを確認してください。カスタムJavaScriptがそれらのコンストラクタの動作を変更できるようにすると、あなたのホワイトリストが強制できなくなる可能性が高くなります。カスタムJavaScriptをロードする前にグローバルを変更できないように変更することは、パフォーマンスを犠牲にして行われる可能性があり、非常に完全ではないかもしれません。 –

関連する問題