CodeQL 文档

无效原型值

ID: js/invalid-prototype-value
Kind: problem
Security severity: 
Severity: error
Precision: high
Tags:
   - correctness
   - language-features
   - external/cwe/cwe-704
Query suites:
   - javascript-security-and-quality.qls

点击查看 CodeQL 存储库中的查询

所有 JavaScript 对象(包括函数、类和数组)都具有原型,原型要么是 null,要么是另一个对象。对象的原型可以通过两种方式设置,这两种方式都防止尝试分配无效原型(如原始值)

  1. 将值分配给对象的 __proto__ 属性;如果该值不是有效的原型,则分配会被静默忽略。

  2. 使用标准库函数 Object.createObject.setPrototypeOf;无效原型值会导致运行时错误。总之,任何尝试将对象的原型设置为非对象或 null 的值都将无效,并可能导致运行时错误。

建议

通过提供有效的原型值来修复原型赋值。

示例

以下代码尝试创建一个原型为 undefined 的对象,这将导致运行时错误

let dict = Object.create(undefined);

如果意图是创建一个没有原型对象的物体,则应使用 null 代替

let dict = Object.create(null);

参考资料

  • ©GitHub, Inc.
  • 条款
  • 隐私