CodeQL 文档

用户控制数据的反序列化

ID: js/unsafe-deserialization
Kind: path-problem
Security severity: 9.8
Severity: warning
Precision: high
Tags:
   - security
   - external/cwe/cwe-502
Query suites:
   - javascript-code-scanning.qls
   - javascript-security-extended.qls
   - javascript-security-and-quality.qls

单击以在 CodeQL 存储库中查看查询

使用任何允许构建任意函数的反序列化框架反序列化不受信任的数据很容易被利用,并且在许多情况下,允许攻击者执行任意代码。

建议

尽可能避免反序列化不受信任的数据。如果架构允许,则使用不能表示函数的格式,如 JSON 或 XML。当使用 YAML 或其他支持函数序列化和反序列化的格式时,请确保解析器配置为禁用任意函数的反序列化。

示例

以下示例在来自 HTTP 请求(因此本质上是不安全的)的数据上调用流行的 js-yaml 包的 load 函数。

const app = require("express")(),
  jsyaml = require("js-yaml");

app.get("load", function(req, res) {
  let data = jsyaml.load(req.params.data);
  // ...
});

使用 safeLoad 函数(它不会反序列化 YAML 编码的函数)可以消除漏洞。

const app = require("express")(),
  jsyaml = require("js-yaml");

app.get("load", function(req, res) {
  let data = jsyaml.safeLoad(req.params.data);
  // ...
});

参考资料

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