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"
私の表示名として、これはデータベースから取得でき、ハードコーディングされていません。