CodeQL 文档

为 JavaScript 指定额外的远程流源

弃用通知

使用此处描述的 JSON 格式指定远程流源即将弃用,并将在此后的版本中删除。

您可以通过在外部文件中指定额外的远程流源来对代码中潜在的不受信任用户输入来源进行建模,而无需更改 CodeQL 标准库。

适用于 JavaScript 的数据流速查表中所述,适用于 JavaScript 的 CodeQL 库提供了一个类RemoteFlowSource 来表示不受信任用户输入的来源,有时也称为远程流源。

要对不受信任输入的新来源进行建模(例如以前未建模的库 API),您可以定义 RemoteFlowSource 的子类,该子类涵盖了该 API 的所有用法。然后,所有标准分析将自动拾取此不受信任输入的新来源。

但是,这种方法需要编写 QL 代码并将其添加到标准库中,这并不总是容易做到。相反,您还可以将描述自定义不受信任输入来源的 JSON 文件添加到代码库中,并让它在无需修改标准库的情况下被拾取。此 JSON 文件可以手动编写或由其他工具生成。自定义远程流源仅对包含 JSON 文件的代码库可用。这意味着您需要将 JSON 文件复制到每个需要自定义的代码库中。

规范格式

JSON 文件必须称为 codeql-javascript-remote-flow-sources.json,并且可以位于代码库中的任何位置。它应该包含单个 JSON 对象。此对象的属性名称被解释为“来源类型”。它们映射到的值应该是字符串数组。每个字符串都应该是 window.props 形式,其中 props 是一个或多个用点分隔的属性名称的序列。此表示法指定通过此属性名称序列从全局窗口对象访问到的任何值都应被视为关联来源类型的不可信用户输入。

示例

考虑以下规范

{
  "user input": [ "window.user.name", "window.user.address", "window.dob" ]
}

它声明全局变量 dob 的内容以及全局变量 user 的属性 nameaddress 的内容应被视为远程流源,其来源类型为“用户输入”。

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