eslint/no-eval 正しさ
何をするか
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