2012-04-18 13 views
2

私はEnyo Webアプリケーションを開発しており、ユーザがJavascriptコードをブラウザに書き込んで実行できるようにしたいと考えています。ブラウザでJavascriptエディタと実行

window.evalを使用してこれを行うことができます。しかし、私はevalの邪悪について読んだ。

http://learn.knockoutjs.com/,http://jsfiddle.netなどの例がブラウザの実行において安全に実行され、ベストプラクティスはどのようなものかについていくつかの洞察を与えることができる人はいますか?

+3

http://jsbin.comはオープンソースで、[gedub](https://github.com/remy/jsbin)でホストされています。そのコードを勉強するのがとても簡単になります。 – Sampson

+1

ちょうど別のドメインでコードが実行されていると、あなたはかなり完了しています。 – Yoshi

+0

あなたはevalの邪悪について何をお読みになりましたか? – user123444555621

答えて

2

Evalは、実行時(またはメタプログラミング時)にプログラムを生成した場合の1つの特定の場合を除いて悪いとみなされます。唯一の選択肢は、パーサー/インタープリタを書くことです(javascriptでは比較的簡単に行うことができますが、javascript自体よりも単純な言語で行うことができます)。したがって、ここでeval()関数を使用することは合理的です(ブラウザ側のコンパイラを合理的に高速なコードにするためには、生成されたコンパイル済みのjavascriptにはevalを使用する必要があります)。

しかし、評価されたコードは、実行されるスクリプトと同じ特権とその環境へのアクセス権を持つため、evalの問題はセキュリティです。最近、EcmaScript 5は厳密モードを導入することでこの問題に部分的に対処するように設計されました。厳密モードコードを危険な操作について静的に解析できるためです。

これは通常、サーバーのコードを分析してセキュリティを解決し、JavaScriptの厳密な安全なサブセットのみを使用できるようにするCajaのようなアプローチがあります(下位互換性の理由で問題があります)。

よく使用されるもう1つのアプローチは、親ページに埋め込まれた要素(通常はなどのサイトで使用される)でユーザーが生成したjavascriptを実行して悪意のある攻撃から保護しないことです。しかし、iframeがその親ページにアクセスしてコンテンツにアクセスすることは安全ではありません。

このiframeのアプローチであっても、最近、いくつかの進歩があった。クロームであなたも異なる権限を指定することができますsandbox属性

<iframe src="sandboxedpage.html" sandbox="allow-scripts"></iframe> 

を使用して、それを受けにくいようにします。

安全に簡単にメタプログラミングを使用する簡単な方法がありますが、まだありません。

+0

偉大な答え - 私はサンドボックスのiframeを調べて、厳格なモードを使用しています。回答を投稿していただきありがとうございます。 –

関連する問題