Skip to content
Vol. 1 · Ed. 2026
CyberGlossary
Entry № 392

Eval 注入

Eval 注入 是什么?

Eval 注入代码注入的一种具体形式,起因于将不受信任的输入传递给动态求值原语(如 JavaScript eval() 或 Python eval/exec)。


Eval 注入是代码注入的具体子类:语言的动态求值函数——JavaScript 的 eval、new Function、字符串形式的 setTimeout,Python 的 eval/exec,Ruby 的 eval,PHP 中的等价物以及 VBA 的 Application.Run——被以直接或间接来自用户输入的数据调用。这些原语会将传入字符串当作宿主进程中的完整源码解释执行,因此利用后能获得语言级 RCE:可访问全部导入、全局变量、文件系统、环境变量以及子进程。缓解措施包括彻底移除动态求值、改用安全解析器(JSON.parse、ast.literal_eval)、在确实需要数学/表达式求值时使用严格白名单校验器,以及部署 vm2 等运行时沙箱或受限子进程。

示例

  1. 01

    Python:result = eval(request.form['expr']) — 载荷 __import__('os').system('id')。

  2. 02

    Node:new Function('return ' + req.query.f)() — 载荷 process.mainModule.require('child_process').execSync('id')。

常见问题

Eval 注入 是什么?

代码注入的一种具体形式,起因于将不受信任的输入传递给动态求值原语(如 JavaScript eval() 或 Python eval/exec)。 它属于网络安全的 攻击与威胁 分类。

Eval 注入 是什么意思?

代码注入的一种具体形式,起因于将不受信任的输入传递给动态求值原语(如 JavaScript eval() 或 Python eval/exec)。

Eval 注入 是如何工作的?

Eval 注入是代码注入的具体子类:语言的动态求值函数——JavaScript 的 eval、new Function、字符串形式的 setTimeout,Python 的 eval/exec,Ruby 的 eval,PHP 中的等价物以及 VBA 的 Application.Run——被以直接或间接来自用户输入的数据调用。这些原语会将传入字符串当作宿主进程中的完整源码解释执行,因此利用后能获得语言级 RCE:可访问全部导入、全局变量、文件系统、环境变量以及子进程。缓解措施包括彻底移除动态求值、改用安全解析器(JSON.parse、ast.literal_eval)、在确实需要数学/表达式求值时使用严格白名单校验器,以及部署 vm2 等运行时沙箱或受限子进程。

如何防御 Eval 注入?

针对 Eval 注入 的防御通常结合技术控制与运营实践,详见上方完整定义。

Eval 注入 还有哪些其他名称?

常见的别称包括: eval() 注入, 动态求值注入。

相关术语