You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调用从视图下拉框传递到控制器的Helper函数?

解决方法

首先要明确:直接执行POST传过来的字符串存在安全风险,必须先做白名单校验和必要的字符串清理,再调用目标函数。

步骤1:优化视图(可选但推荐)

把下拉框的option值改为纯函数名,省去后续字符串处理步骤:

<select name="FUNCT_NAME">
    <option value="test">调用test函数</option>
</select>

步骤2:控制器中安全调用函数

情况1:视图传的是原数据test();

$func_str = $this->input->post('FUNCT_NAME');
// 提取纯函数名:移除括号和分号
$func_name = trim(str_replace(['()', ';'], '', $func_str));

// 定义允许调用的函数白名单,防止恶意注入
$allowed_funcs = ['test'];
// 校验函数是否在白名单且已存在
if (in_array($func_name, $allowed_funcs) && function_exists($func_name)) {
    $func_name(); // 调用test函数,输出"Got here"
} else {
    echo '不允许的函数调用';
}

情况2:视图传的是纯函数名test

代码更简洁:

$func_name = $this->input->post('FUNCT_NAME');

$allowed_funcs = ['test'];
if (in_array($func_name, $allowed_funcs) && function_exists($func_name)) {
    $func_name();
} else {
    echo '不允许的函数调用';
}

关键注意事项

  • 绝对不能直接使用eval($func_name)执行字符串,这会引发严重的代码注入漏洞。
  • 必须通过白名单限制可调用的函数,只允许预先定义的helper函数被触发。

内容的提问来源于stack exchange,提问作者Raham

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 01:25:29