Eval は、コードのテンプレート化に使用されるコンパイルを補完します。テンプレート化とは、開発速度を向上させる便利なテンプレート コードを生成する単純化されたテンプレート ジェネレーターを作成することを意味します。
開発者が EVAL を使用しないフレームワークを作成しましたが、開発者は私たちのフレームワークを使用し、そのフレームワークは EVAL を使用してテンプレートを生成する必要があります。
EVAL のパフォーマンスは、次の方法を使用して向上させることができます。スクリプトを実行する代わりに、関数を返す必要があります。
var a = eval("3 + 5");
次のように編成する必要があります。
var f = eval("(function(a,b) { return a + b; })");
var a = f(3,5);
f をキャッシュすると、確かに速度が向上します。
また、Chrome では、このような機能を非常に簡単にデバッグできます。
セキュリティに関しては eval を使っても使わなくてもほとんど変わらないので、
- まず、ブラウザはサンドボックス内のスクリプト全体を呼び出します。
- EVAL で悪であるコードは、ブラウザー自体でも悪です。攻撃者または誰でも簡単に DOM にスクリプト ノードを挿入し、何かを評価できれば何でも実行できます。EVAL を使用しなくても違いはありません。
- 害があるのは、主にサーバー側のセキュリティの悪さです。ほとんどの攻撃は、Cookie の検証が不十分であるか、サーバーでの ACL の実装が不十分であることが原因です。
- 最近の Java の脆弱性などは、Java のネイティブ コードにありました。JavaScript はサンドボックス内で実行するように設計されていますが、アプレットはサンドボックスの外で実行するように設計されており、脆弱性やその他多くの原因となる証明書などがあります。
- ブラウザを模倣するコードを書くことは難しくありません。必要なのは、お気に入りのユーザー エージェント文字列を使用してサーバーに HTTP 要求を送信することだけです。いずれにせよ、すべてのテスト ツールはブラウザを模倣します。攻撃者があなたに危害を加えたい場合、EVAL は最後の手段です。サーバー側のセキュリティに対処する方法は他にもたくさんあります。
- ブラウザ DOM は、ファイルやユーザー名にアクセスできません。実際、 eval がアクセスできるマシンには何もありません。
サーバー側のセキュリティが万全で、どこからでも攻撃できるのであれば、EVAL について心配する必要はありません。前述したように、EVAL が存在しない場合、攻撃者はブラウザーの EVAL 機能に関係なく、サーバーにハッキングするための多くのツールを持っています。
Eval は、事前に使用されていないものに基づいて複雑な文字列処理を行うためのテンプレートを生成する場合にのみ適しています。たとえば、私は好むでしょう
"FirstName + ' ' + LastName"
とは対照的に
"LastName + ' ' + FirstName"
データベースから取得でき、ハードコードされていない私の表示名として。