调用类似 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
一些 DOM 函数允许将字符串作为代码进行评估,而无需显式使用eval
。出于与eval
本身相同的原因,应避免使用这些函数。
建议¶
调用setTimeout
或setInterval
时,不要传递要评估的字符串,而要传递函数。
不要使用document.write
将原始 HTML 插入 DOM,而要使用jQuery之类的框架。
示例¶
在以下示例中,setTimeout
用于注册回调。超时到期后要执行的代码以字符串形式给出;这是不好的做法。
setTimeout("notifyUser();", 1000);
相反,直接将要调用的函数传递给setTimeout
,如下所示
setTimeout(notifyUser, 1000);
参考文献¶
D. Crockford,JavaScript:精华部分,附录 B.3。O’Reilly,2008 年。
常见漏洞枚举:CWE-676。