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() 调用通常对性能的影响也更小, 因为它们不会调用 JavaScript 的作用域链。
如何使用
To enable this rule using the config file or in the CLI, you can use:
json
{
"rules": {
"no-eval": "error"
}
}ts
import { defineConfig } from "oxlint";
export default defineConfig({
rules: {
"no-eval": "error",
},
});bash
oxlint --deny no-eval版本
此规则在 v0.0.3 中添加。
