CodeQL 文档

字符串而不是正则表达式

ID: js/string-instead-of-regex
Kind: problem
Security severity: 
Severity: warning
Precision: high
Tags:
   - correctness
Query suites:
   - javascript-security-and-quality.qls

点击查看 CodeQL 仓库中的查询

使用字符串作为第一个参数调用内置方法String.prototype.splitString.prototype.replace 会使这些方法搜索该确切的字符串。提供正则表达式而不是字符串会使这些方法执行正则表达式搜索。

使用具有正则表达式格式的字符串调用这些方法可能是一个错误,因为这些方法不会将字符串转换为正则表达式。

建议

调用String.prototype.splitString.prototype.replace 时,除非需要精确搜索,否则使用正则表达式作为第一个参数。

示例

以下代码片段显示了对String.prototype.replace 的调用。该调用的目的是删除所有非字母数字字符。

			var cleaned = input.replace("[^a-zA-Z0-9]+", "");
		

不幸的是,第一个参数是字符串而不是正则表达式,因此该调用只会删除第一个正好为“[^a-zA-Z0-9]+”的子字符串。

相反,第一个参数应该是具有global 标志设置的正则表达式。

			var cleaned = input.replace(/[^a-zA-Z0-9]+/g, "");
		

参考

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