Skip to content
← Back to rules

eslint/no-eval 正しさ

This rule is turned on by default.

何をするか

eval 関数への参照を禁止します。このルールは、eval() 関数の使用を禁止することで、危険で不必要な、かつ遅いコードを防ぐことを目的としています。

なぜ悪いのか

JavaScript の eval() 関数は潜在的に危険であり、頻繁に誤用されます。信頼できないコードに対して eval() を使用すると、さまざまなインジェクション攻撃のリスクが生じます。多くの状況下で eval() の使用は、JSON.parse()Function コンストラクタをより安全な方法で使うといった、より良い代替手段で置き換えることができます。

このルールに対して 誤り なコードの例:

js
const obj = { x: "foo" },
  key = "x",
  value = eval("obj." + key);

(0, eval)("const a = 0");

const foo = eval;
foo("const a = 0");

this.eval("const a = 0");

このルールに対して 正しい コードの例:

js
const obj = { x: "foo" },
  key = "x",
  value = obj[key];

class A {
  foo() {
    this.eval("const a = 0");
  }

  eval() {}

  static {
    this.eval("const a = 0");
  }

  static eval() {}
}

設定

このルールは以下のプロパティを持つ設定オブジェクトを受け入れます。

allowIndirect

type: boolean

default: true

allowIndirect オプションにより、間接的な eval() 呼び出しを許可します。

間接的な eval() 呼び出し(例:window['eval'])は、動的にスコープを変更できないため、直接呼び出しよりも危険性が低くなります。また、間接的な eval() 呼び出しは、スコープチェーンを呼び出さないため、直接呼び出しと比べてパフォーマンスへの影響も通常小さくなります。

使用方法

設定ファイルまたは CLI でこのルールを 有効化 するには、次のいずれかを使用できます:

json
{
  "rules": {
    "no-eval": "error"
  }
}
bash
oxlint --deny no-eval

参照