eslint/no-prototype-builtins 严谨
它的作用
禁止直接在对象上调用某些 Object.prototype 方法
为什么这是个问题?
在 ECMAScript 5.1 中,新增了 Object.create,可用于创建具有指定 [[Prototype]] 的对象。Object.create(null) 是一种常见模式,用于创建将作为 Map 使用的对象。
当假设对象会拥有来自 Object.prototype 的属性时,这可能导致错误。此规则防止直接从对象调用某些 Object.prototype 方法。
此外,对象可能具有遮蔽 Object.prototype 上内置方法的属性,从而可能导致意外行为或拒绝服务类的安全漏洞。
例如,如果一个网页服务器解析来自客户端的 JSON 输入,并直接在结果对象上调用 hasOwnProperty,则存在安全隐患:恶意客户端可以发送类似 {"hasOwnProperty": 1} 的 JSON 值,导致服务器崩溃。
为了避免这类微妙的错误,建议始终从 Object.prototype 调用这些方法。例如,应将 foo.hasOwnProperty("bar") 替换为 Object.prototype.hasOwnProperty.call(foo, "bar")。
示例
此规则的 错误 代码示例:
javascript
var hasBarProperty = foo.hasOwnProperty("bar");
var isPrototypeOfBar = foo.isPrototypeOf(bar);
var barIsEnumerable = foo.propertyIsEnumerable("bar");如何使用
要通过配置文件或 CLI 启用 此规则,可以使用:
json
{
"rules": {
"no-prototype-builtins": "error"
}
}bash
oxlint --deny no-prototype-builtins