PHP面试题更新 2026-08-05

请说明 PHP 中 eval() 函数的用法,并分析其潜在的安全风险。

风险判断安全意识技术原理PHP

考察说明

考查对 eval() 函数机制和代码注入风险的理解。

回答思路

  1. 【回答框架 1】eval() 将传入字符串作为 PHP 代码执行,并返回表达式的值或 null。它可用于动态执行代码,但需严格控制输入,避免用户可控内容传入。
  2. 【回答框架 2】核心风险是代码注入,若字符串包含未过滤的用户输入,攻击者可执行任意 PHP 代码,导致数据泄露、系统损坏或服务器被控制。
  3. 【回答框架 3】安全建议:尽量避免使用 eval();必须使用时,对输入进行严格白名单校验,限制可执行命令范围,并采用最小权限运行环境。
  4. 【回答框架 4】替代方案包括使用语法解析器(如 token_get_all)分析代码,或使用安全的模板引擎(如 Twig)实现动态逻辑,避免直接执行。
  5. 【关键点 1】eval() 执行任意 PHP 代码,返回表达式结果或 null。
  6. 【关键点 2】用户输入直接传入 eval() 会导致远程代码执行漏洞。
  7. 【关键点 3】应避免使用 eval(),或使用白名单校验和沙箱环境降低风险。
  8. 【关键点 4】可用模板引擎或语法分析替代 eval() 实现动态逻辑。
  9. 【易错点 1】仅过滤危险函数(如 system)不充分,攻击者可绕过过滤器执行任意代码。
  10. 【易错点 2】使用 eval() 后未设置错误抑制或日志,难以追踪安全事件。
  11. 【易错点 3】误认为 eval() 比 call_user_func 安全,实际上两者风险均高,需同等防护。