生徒がJavaScriptプログラミングについて教えるための簡単なWebページを作成する予定です。このページでは、テキストボックスを用意してJavaScriptを実行して、職場での言語の動的な性質を確認できるようにしたいと考えています。しかし、私は、eval()をユーザー入力に使用することは、通常、本当に悪い考えです。このようなページを公開すると、どのようなセキュリティ上のリスクが発生しますか?これらのリスクを軽減するためにはどのような措置を取る必要がありますか?eval()を使用してJavaScriptでユーザー入力を実行するセキュリティリスク
答えて
自分のマシンで実行されます。文字列を保存して他の人に送信しないようにしてください。また、GETを介してURLに値を入れないでください(電子メールで送信できるように)。
つまり、ユーザーがフォーム上で実行したいコードは、サイトが実行されているドメインの権限を持つことができるということです。
ロックされているが、あなたのサイトを信頼しているマシンでコードを実行したい場合(例えば、アクティブなxコントロールなどを実行できるようにする)、その人は正しいコードを入力して、サイトを使用してスクリプトを信頼できる場所に評価してください。基本的には、これを行うことで、そのページで実行されていることが、あなたのドメインを信頼する人々にとって安全であることが証明されます。 (IEなどの信頼できるサイトを考えてください)
ローカルの「スローアウェイ」マシンの場合、リスクはほとんどありません。すべてがクライアント側で実行されているので、自分自身を傷つけるのはJavaScriptです。最悪の場合、彼らはAjax接続を開くことができるかもしれませんが、それは彼らにTamper DataアドオンのFirefoxを与えるよりもそれほど有害ではありません。
要するに、使用しているマシンを除いて、JavaScriptを使用して自由に支配するリスクはほとんどありませんが、十分に巧妙であれば自分でできないものは何もありません。私は彼らが自分のマシンでそれを実行することをお勧めしたいと思います。デモボックスでは、いつでも再イメージすることができます。
今のところ、PHP/etcへのevalアクセス権を与えることは恐ろしい、ひどい考えです。
あなたが取っているセキュリティリスクは、ユーザーからの入力を受けて、サイトのスクリプトのコンテキストで実行していることです。どのような理由であれ、ウェブサイト上で実行されているJavaScriptを変更する完全なアクセス権を持っている悪質なクラッカーであったとします。あなたのドメイン上で実行されているJavaScriptには、実行可能な機能(Cookieの盗用、XSS、ドライブバイマルウェアなど)を行うことができます。
リスクを軽減するために現実的にできるのは、ユーザー提供のコンテンツを評価しないことです。 「安全な」入力のみを許可するように入力をサニタイズしようとすると、失敗することになります。潜在的な攻撃者が自分の意図を隠すための解釈された言語を持っていることを考えると、何が安全であるかを定義することはほとんど不可能です。
教育目的のためのものであれば、セキュリティホールのすべてが重要でないことを確認するだけです。悪いJavaScriptはサーバーを破壊したり、銀行の口座から盗むことはできません。ページをホストしているサイトに盗難に値するクッキーやセッションがなく、学生がそれが単なる教育リソースであることが分かっている場合、私は心配するものはないと思います。攻撃の大部分は、ドメインに格納されている機密情報にアクセスすることや、ドメイン訪問者を機密情報を何らかの理由で欺くことに依存しています(phishing攻撃など)。あなたの目的のために、私はあなたがOKであると思う - ただ "本当の"ウェブサイトでそれをしないでください。
すごい説明。 –
開発ツールを使用したい任意のコードをユーザーが実行できることを考慮して、ユーザーが提供する任意のコードを実行する機能はありませんか? –
評価されたコードがすべてのグローバル(ウィンドウ)オブジェクトのプロパティとメソッドにアクセスするのを防ぐために、すべてのユーザー入力評価をサンドボックスすることをお勧めします。
これらはサンドボックスではなく、新しい環境です。親ウィンドウは 'parent'または' top'で簡単にアクセスでき、オブジェクトのevalメソッドを使うことができます。 JavaScriptの実際のJavaScriptサンドボックスライブラリはJSandboxです。 –
本当にここには深刻なリスクがありません:
は、次のリソースへの外観を与えます。たとえば、このページでFirebugを開き、コンソールに「eval("alert('hello');");
」と入力しますか?あんまり。
デモの目的でこれは大したことではありません。
JavaScriptサンドボックスライブラリを使用できます。 Dean EdwardのソリューションCajaは、コードが現在のウィンドウまたはドキュメントにアクセスすることを制限しません。 JSandboxライブラリーはWeb Worker Threadsを使用してコード実行を完全にサンドボックス化します(このためにDOMを使用することはできません)。ただし、サポートするブラウザーでのみ機能します。
JSandboxは非同期なので、コールバックを使用するように選択した場合は、コールバックを使用するようにコードを変更する必要があります。
- 1. eval()を使用してJSONでJavaScript関数を実行
- 2. Javascriptを使用してコマンドプロンプトでユーザー入力を促す
- 3. javascriptを使用してユーザー入力を制限する
- 4. evalを使用してユーザー入力をリストに入れるにはどうすればよいですか?
- 5. ユーザー入力なしのPHPによるMySQLクエリのセキュリティリスク
- 6. キーボード入力を使用してモジュールから関数を呼び出す - 「セキュリティリスク」?
- 7. .NETでEvalを使用してCssClassに文字列を入力する方法
- 8. Javascript/JQueryでユーザー入力を使用してテーブルを作成する方法
- 9. ユーザー入力でcrontabを実行
- 10. ユーザーがPythonコードを入力して実行する方法
- 11. ユーザー入力としてコードを実行するには?
- 12. HTMLフォームフィールドを入力してJavaScriptを実行する方法は?
- 13. Javascriptを使用してフォームからユーザー入力を表示する
- 14. JavaScriptコードを使用してユーザーの入力を制限するクロスブラウザコード
- 15. javascript/jqueryを使用してユーザー入力をライブスタイルにする方法
- 16. javascriptのevalの実行を遅く
- 17. Rubyでshellコマンドを実行しているときにユーザー入力をパラメータとして使用
- 18. JSONを入力で使用するJavaScript
- 19. C#JavaScriptを使用してWebViewでdivを入力する
- 20. three.jsを使用してユーザー入力を使用してキューブを作成する
- 21. JavaScriptでユーザー入力のURLを取得して検証する
- 22. SQLqueryを入力として使用したEF遅延実行
- 23. ユーザー入力を読み込んでメソッドを実行する
- 24. コマンドプロンプトで入出力ファイルを使用してJavaプログラムを実行する
- 25. 異なるユーザー入力でC++コードを実行するスクリプト
- 26. evalを使用してaasmブロックを実行するときのエラー
- 27. ユーザー入力をパラメータとして使用する.pyスクリプトを実行する方法
- 28. RSpecを使用してユーザー入力をテストする
- 29. ユーザー入力を使用してアレイを検索する
- 30. .splitを使用してユーザー入力を処理する
ページをローカルで実行するだけです。それをウェブ上に置く理由はありません。 –