CodeQL 文档

字符串字面量中的模板语法

ID: js/template-syntax-in-string-literal
Kind: problem
Security severity: 
Severity: warning
Precision: high
Tags:
   - correctness
Query suites:
   - javascript-security-and-quality.qls

点击查看 CodeQL 仓库中的查询

模板字面量是用反引号 ( `` ) 括起来的字符串。它们可能包含带有语法 ${*..*} 的占位符表达式,这些表达式在运行时被计算并作为字符串的一部分插入。

普通字符串字面量可以用单引号 ( '' ) 或双引号 ( "" ) 括起来,占位符语法 ${*..*} 在这些字符串中没有特殊含义。

在使用模板字面量的文件中,很难区分实际的模板字面量与恰好包含占位符语法的普通字符串。这通常是由于在模板字面量上错误地键入了引号。

建议

考虑一下这是否打算成为一个模板字面量,如果是,则将引号更改为反引号 ( `` )。或者

  • 重命名一些局部变量,以便占位符不会让人觉得它们是引用这些变量。

  • 避免在同一个文件中混合使用 JavaScript 模板字面量和其他模板系统。

示例

在以下示例中,对 log.error 的调用将记录字符串“${id}”,而不是 id 变量的内容。

log.info(`Connecting to ${id}`)
let connection = openConnection(id)
if (!connection) {
  log.error('Could not connect to ${id}')
}

要纠正错误消息,请将引号更改为反引号

log.info(`Connecting to ${id}`)
let connection = openConnection(id)
if (!connection) {
  log.error(`Could not connect to ${id}`)
}

参考

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