2009-10-30 12 views
7

生徒がJavaScriptプログラミングについて教えるための簡単なWebページを作成する予定です。このページでは、テキストボックスを用意してJavaScriptを実行して、職場での言語の動的な性質を確認できるようにしたいと考えています。しかし、私は、eval()をユーザー入力に使用することは、通常、本当に悪い考えです。このようなページを公開すると、どのようなセキュリティ上のリスクが発生しますか?これらのリスクを軽減するためにはどのような措置を取る必要がありますか?eval()を使用してJavaScriptでユーザー入力を実行するセキュリティリスク

+4

ページをローカルで実行するだけです。それをウェブ上に置く理由はありません。 –

答えて

5

自分のマシンで実行されます。文字列を保存して他の人に送信しないようにしてください。また、GETを介してURLに値を入れないでください(電子メールで送信できるように)。

0

つまり、ユーザーがフォーム上で実行したいコードは、サイトが実行されているドメインの権限を持つことができるということです。

ロックされているが、あなたのサイトを信頼しているマシンでコードを実行したい場合(例えば、アクティブなxコントロールなどを実行できるようにする)、その人は正しいコードを入力して、サイトを使用してスクリプトを信頼できる場所に評価してください。基本的には、これを行うことで、そのページで実行されていることが、あなたのドメインを信頼する人々にとって安全であることが証明されます。 (IEなどの信頼できるサイトを考えてください)

2

ローカルの「スローアウェイ」マシンの場合、リスクはほとんどありません。すべてがクライアント側で実行されているので、自分自身を傷つけるのはJavaScriptです。最悪の場合、彼らはAjax接続を開くことができるかもしれませんが、それは彼らにTamper DataアドオンのFirefoxを与えるよりもそれほど有害ではありません。

要するに、使用しているマシンを除いて、JavaScriptを使用して自由に支配するリスクはほとんどありませんが、十分に巧妙であれば自分でできないものは何もありません。私は彼らが自分のマシンでそれを実行することをお勧めしたいと思います。デモボックスでは、いつでも再イメージすることができます。

今のところ、PHP/etcへのevalアクセス権を与えることは恐ろしい、ひどい考えです。

8

あなたが取っているセキュリティリスクは、ユーザーからの入力を受けて、サイトのスクリプトのコンテキストで実行していることです。どのような理由であれ、ウェブサイト上で実行されているJavaScriptを変更する完全なアクセス権を持っている悪質なクラッカーであったとします。あなたのドメイン上で実行されているJavaScriptには、実行可能な機能(Cookieの盗用、XSS、ドライブバイマルウェアなど)を行うことができます。

リスクを軽減するために現実的にできるのは、ユーザー提供のコンテンツを評価しないことです。 「安全な」入力のみを許可するように入力をサニタイズしようとすると、失敗することになります。潜在的な攻撃者が自分の意図を隠すための解釈された言語を持っていることを考えると、何が安全であるかを定義することはほとんど不可能です。

教育目的のためのものであれば、セキュリティホールのすべてが重要でないことを確認するだけです。悪いJavaScriptはサーバーを破壊したり、銀行の口座から盗むことはできません。ページをホストしているサイトに盗難に値するクッキーやセッションがなく、学生がそれが単なる教育リソースであることが分かっている場合、私は心配するものはないと思います。攻撃の大部分は、ドメインに格納されている機密情報にアクセスすることや、ドメイン訪問者を機密情報を何らかの理由で欺くことに依存しています(phishing攻撃など)。あなたの目的のために、私はあなたがOKであると思う - ただ "本当の"ウェブサイトでそれをしないでください。

+0

すごい説明。 –

+4

開発ツールを使用したい任意のコードをユーザーが実行できることを考慮して、ユーザーが提供する任意のコードを実行する機能はありませんか? –

2

評価されたコードがすべてのグローバル(ウィンドウ)オブジェクトのプロパティとメソッドにアクセスするのを防ぐために、すべてのユーザー入力評価をサンドボックスすることをお勧めします。

+2

これらはサンドボックスではなく、新しい環境です。親ウィンドウは 'parent'または' top'で簡単にアクセスでき、オブジェクトのevalメソッドを使うことができます。 JavaScriptの実際のJavaScriptサンドボックスライブラリはJSandboxです。 –

1

本当にここには深刻なリスクがありません:

は、次のリソースへの外観を与えます。たとえば、このページでFirebugを開き、コンソールに「eval("alert('hello');");」と入力しますか?あんまり。

デモの目的でこれは大したことではありません。

2

JavaScriptサンドボックスライブラリを使用できます。 Dean EdwardのソリューションCajaは、コードが現在のウィンドウまたはドキュメントにアクセスすることを制限しません。 JSandboxライブラリーはWeb Worker Threadsを使用してコード実行を完全にサンドボックス化します(このためにDOMを使用することはできません)。ただし、サポートするブラウザーでのみ機能します。

JSandboxは非同期なので、コールバックを使用するように選択した場合は、コールバックを使用するようにコードを変更する必要があります。

関連する問題