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

Codeigniter表单提交带端口IP地址返回403 Forbidden错误解决求助

问题根因

你遇到的403报错大概率不是Codeigniter框架层面的拦截,而是服务器部署的WAF(Web应用防火墙,比如ModSecurity、云厂商内置WAF)规则触发了:纯文本格式的完整带端口URL被判定为恶意注入请求,加引号后不符合WAF的拦截规则就可以正常提交。你已经关闭CI全局XSS过滤仍出现问题,也验证了根因不在CI本身。

可行解决方案

  • 方案1:前端编码+服务端解码
    表单提交前用JS对IP字段做编码处理,编码后的内容不会触发WAF的URL拦截规则,服务端接收后解码即可正常使用。
    前端示例代码(绑定表单submit事件):
    document.querySelector('form').addEventListener('submit', function() {
      const ipInput = document.getElementById('ip');
      ipInput.value = btoa(ipInput.value); // base64编码
    })
    
    服务端解码代码:
    'ip' => base64_decode($this->input->post('ip')),
    
  • 方案2:拆分IP字段输入
    把IP输入拆成「协议」「IP地址」「端口」三个独立输入框,前端提交前或服务端接收后再拼接成完整的http://xxx.xxx.xx.xx:xx/格式,拆分后的纯文本内容不会触发WAF拦截。
  • 方案3:调整WAF规则(拥有服务器权限时可选)
    定位到拦截请求的WAF规则,针对性放开/admin/subeler/add路径POST请求的URL校验规则,或者单独放开ip参数的拦截限制,调整前做好安全评估,避免恶意请求漏过。
  • 方案4:优化CI侧的XSS清理逻辑
    你的代码里还保留了手动XSS清理的逻辑$data = $this->security->xss_clean($data);,可以单独排除IP字段不做XSS清理,避免CI的XSS规则偶发拦截:
    $rawIp = $this->input->post('ip');
    $data = array(
        'name' => $this->input->post('name'),
        'marka' => $this->input->post('grup'),
        'il' => $this->input->post('il'),
        'ilce' => $this->input->post('ilce'),
        'databasePath' => $this->input->post('path'),
        'lisanse_date'=>$this->input->post('lisans')
    );
    $data = $this->security->xss_clean($data);
    $data['ip'] = $rawIp; // 单独赋值未清理的IP字段
    

验证建议

可以先抓包查看返回403的响应头,如果存在X-WAF-Error、Server: cloudflare这类标识,就能直接确认是WAF拦截导致的问题。

内容的提问来源于stack exchange,提问作者Çağatay Kaya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:48:03