CodeQL 文档

调用类似 eval 的 DOM 函数

ID: js/eval-like-call
Kind: problem
Security severity: 
Severity: recommendation
Precision: very-high
Tags:
   - maintainability
   - external/cwe/cwe-676
Query suites:
   - javascript-security-and-quality.qls

点击查看 CodeQL 代码库中的查询

一些 DOM 函数允许将字符串作为代码进行评估,而无需显式使用eval。出于与eval本身相同的原因,应避免使用这些函数。

建议

调用setTimeoutsetInterval时,不要传递要评估的字符串,而要传递函数。

不要使用document.write将原始 HTML 插入 DOM,而要使用jQuery之类的框架。

示例

在以下示例中,setTimeout用于注册回调。超时到期后要执行的代码以字符串形式给出;这是不好的做法。

setTimeout("notifyUser();", 1000);

相反,直接将要调用的函数传递给setTimeout,如下所示

setTimeout(notifyUser, 1000);

参考文献

  • D. Crockford,JavaScript:精华部分,附录 B.3。O’Reilly,2008 年。

  • 常见漏洞枚举:CWE-676

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