0

重複の可能性:
JavaScript の eval() が悪でないのはいつですか?

私は考えていた、

さらに、インタープリターEval を再度アクティブにするため、オーバーヘッドが発生します。

それが悪い可能性がある唯一の状況 (私が書いたものを除く) は、JSデータ (つまりeval'd) をサーバーに送信するときです。

他のシナリオは見当たりません。ユーザーが js を操作したい場合、ユーザーはブラウザーの境界内でのみプレイします (JS がサーバーと対話していない限り)。

私は正しいですか?

修正をいただければ幸いです。

4

1 に答える 1

3

eval厳密に言えば、ブラウザのコンソールがすでに実行できること以上のことをしないため、 を使用しても実際には物理的に有害なことは何もありません。

<script>インジェクションの潜在的な危険性がありますが、それはユーザーが提供した入力をタグに入れるのと同じ危険性であり、 の特殊性ではありませんeval

回避する主な理由evalは、文字列を解釈する必要があるためです。公平を期すために言うと、JavaScript ファイルを実行することは、基本的には、ファイル全体に対して非常に大きなものを呼び出すことと同じevalです (大まかに言えば)。なぜなら、JavaScript は解釈される (またはせいぜい実行時にコンパイルされる) からです。したがって、evalたとえばユーザーがボタンをクリックしたときにのみ実行される場合は、sparsely を使用しても問題ありません。evalループなどで頻繁に実行する場合にのみ、顕著な効果が現れます。setTimeoutこれが、たとえば、文字列の代わりに関数を渡すように常に言われる理由です。

とはいえ、 を使用する代わりの方法は常にevalあります。古いコードの一部を書き直す必要があるかもしれませんが、常に回避できます。

于 2012-07-20T20:46:10.570 に答える