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

CodeIgniter 3添加WAF后出现用户账号互访异常问题求助

问题分析

部署WAF后出现会话串用,核心原因大概率是WAF导致CodeIgniter无法正确识别客户端的唯一标识(IP/UA),或是Session生成、验证逻辑在WAF转发下出现异常。结合共用公网IP和移动端的场景,以下是针对性排查与修复方案:

1. 确保CodeIgniter获取真实客户端IP

WAF作为反向代理时,CI默认会把WAF的IP识别为客户端IP,这会导致同一企业内网的所有用户被判定为同一个IP,若Session匹配策略宽松,极易出现串用。

  • 在config.php中添加WAF的IP地址到信任代理列表:
    $config['proxy_ips'] = '192.168.1.0/24'; // 替换为你的WAF公网/内网IP段
    
    配置后CI会从X-Forwarded-For或X-Real-IP头中提取用户真实IP,而非WAF的IP。

2. 调整Session匹配与再生策略

当前配置中sess_time_to_update=60(每分钟再生Session ID),结合sess_regenerate_destroy=TRUE,若WAF存在请求缓存或转发延迟,可能引发新旧Session ID冲突:

  • 先将sess_time_to_update调回默认的300秒(5分钟),降低Session再生频率:
    $config['sess_time_to_update'] = 300;
    
  • 若共用公网IP的用户内网IP不同,在完成步骤1确保CI能获取真实IP后,可开启sess_match_ip=TRUE,利用内网IP区分会话:
    $config['sess_match_ip'] = TRUE;
    

3. 优化Cookie配置

当前cookie_domain为空,可能导致Cookie在跨子域或特定场景下无法正确传递,被WAF误处理:

  • 设置正确的Cookie域名,比如企业内部系统的根域名:
    $config['cookie_domain'] = '.yourcompany.com'; // 替换为实际域名,前缀点确保所有子域有效
    
  • 若系统支持HTTPS,排查429错误的原因(通常是WAF频率限制),尝试逐步开启cookie_secure=TRUE,同时联系运维调整WAF登录/登出接口的频率阈值:
    $config['cookie_secure'] = TRUE;
    

4. 检查Session数据库表结构

确保ci_sessions表结构符合CI3要求,特别是ip_address和user_agent字段能正确存储用户标识:

CREATE TABLE IF NOT EXISTS `ci_sessions` (
        `id` varchar(128) NOT NULL,
        `ip_address` varchar(45) NOT NULL,
        `timestamp` int(10) unsigned DEFAULT 0 NOT NULL,
        `data` blob NOT NULL,
        `user_agent` varchar(120) NOT NULL,
        PRIMARY KEY (id),
        KEY `ci_sessions_timestamp` (`timestamp`)
);

若表中缺失user_agent字段,需及时添加——当前配置开启了sess_match_useragent=TRUE,缺失该字段会导致Session验证失效。

5. 排查WAF的会话缓存/转发规则

联系运维检查WAF配置:

  • 禁止WAF对Session Cookie(ciapp_session)进行缓存或修改
  • 确保WAF转发所有请求头(尤其是User-Agent、X-Forwarded-For)时不做篡改
  • 排除登录、个人资料等敏感接口的WAF缓存策略

内容的提问来源于stack exchange,提问作者Esar-ul-haq Qasmi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 21:08:11