私は考えていた、
さらに、インタープリターEval
を再度アクティブにするため、オーバーヘッドが発生します。
それが悪い可能性がある唯一の状況 (私が書いたものを除く) は、JS
データ (つまりeval'd
) をサーバーに送信するときです。
他のシナリオは見当たりません。ユーザーが js を操作したい場合、ユーザーはブラウザーの境界内でのみプレイします (JS がサーバーと対話していない限り)。
私は正しいですか?
修正をいただければ幸いです。
私は考えていた、
さらに、インタープリターEval
を再度アクティブにするため、オーバーヘッドが発生します。
それが悪い可能性がある唯一の状況 (私が書いたものを除く) は、JS
データ (つまりeval'd
) をサーバーに送信するときです。
他のシナリオは見当たりません。ユーザーが js を操作したい場合、ユーザーはブラウザーの境界内でのみプレイします (JS がサーバーと対話していない限り)。
私は正しいですか?
修正をいただければ幸いです。
eval
厳密に言えば、ブラウザのコンソールがすでに実行できること以上のことをしないため、 を使用しても実際には物理的に有害なことは何もありません。
<script>
インジェクションの潜在的な危険性がありますが、それはユーザーが提供した入力をタグに入れるのと同じ危険性であり、 の特殊性ではありませんeval
。
回避する主な理由eval
は、文字列を解釈する必要があるためです。公平を期すために言うと、JavaScript ファイルを実行することは、基本的には、ファイル全体に対して非常に大きなものを呼び出すことと同じeval
です (大まかに言えば)。なぜなら、JavaScript は解釈される (またはせいぜい実行時にコンパイルされる) からです。したがって、eval
たとえばユーザーがボタンをクリックしたときにのみ実行される場合は、sparsely を使用しても問題ありません。eval
ループなどで頻繁に実行する場合にのみ、顕著な効果が現れます。setTimeout
これが、たとえば、文字列の代わりに関数を渡すように常に言われる理由です。
とはいえ、 を使用する代わりの方法は常にeval
あります。古いコードの一部を書き直す必要があるかもしれませんが、常に回避できます。