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

如何防止ini_get/phpinfo获取session.save_path等PHP敏感配置值

PHP敏感配置项防代码泄露方案(针对session.save_path等php_admin_value设置的敏感值)

核心防护目标:PHP运行时(底层扩展、核心逻辑)可正常读取配置真实值,但用户态PHP代码无法通过ini_get()、phpinfo()两类渠道获取真实值。

推荐方案(原生支持,无兼容问题,适用于PHP 7.2及以上版本)

这是目前成本最低、稳定性最好的方案,直接使用PHP原生提供的敏感INI项隐藏机制,无额外依赖、不会影响业务正常运行:

  • 配置项为sensitive_ini_entries,该配置本身属于PHP_INI_SYSTEM级别,仅能通过全局php.ini、php-fpm pool配置中的php_admin_value设置,PHP代码、.user.ini、.htaccess均无法篡改,和现有通过php_admin_value设置敏感项的配置方式完全适配。
  • 配置生效后效果:
    • 调用ini_get("session.save_path")等被列入保护的配置项时,直接返回空字符串
    • phpinfo()输出中,被保护的配置项值会被统一替换为*掩码,无法提取真实值
    • PHP核心、各扩展读取配置时依然能拿到真实值,session存储、数据库连接等业务逻辑完全不受影响
  • 配置示例(直接加在php-fpm对应pool的配置段,或者全局php.ini里即可):
; 多个配置项用英文逗号分隔,把所有需要保护的敏感配置都列进去
php_admin_value[sensitive_ini_entries] = "session.save_path,db_conn_password,redis_conn_password"

配置完成后重载php-fpm即可生效。

低版本PHP兼容方案(适用于PHP 7.2以下已停止官方维护的版本)

低于7.2的PHP版本没有原生敏感配置隐藏能力,强烈建议优先升级PHP版本,确需使用旧版本可采用组合防护:

  • 第一步先堵phpinfo()泄露路径:将phpinfo加入disable_functions列表,这本身就是生产环境PHP的标准安全配置,直接在php-fpm pool配置中添加即可:
    php_admin_value[disable_functions] = "phpinfo,phpcredits"
    
  • 第二步堵ini_get()等函数的读取路径:安装Suhosin安全扩展,通过扩展提供的敏感配置隐藏能力实现防护,在扩展配置中添加:
    suhosin.executor.hide_ini_entries = "session.save_path,db_conn_password,redis_conn_password"
    
    配置生效后效果和原生sensitive_ini_entries完全一致,代码读取敏感配置时会返回空,底层运行不受影响。

防护验证与注意事项

  • 配置完成后务必写测试脚本验证:单独写一个PHP脚本调用ini_get('session.save_path')打印结果、调用phpinfo()检查对应项输出,确认拿不到真实值;同时测试session的写入、读取逻辑,确认业务正常运行。
  • 不要尝试通过代码层ini_set覆盖敏感值实现隐藏:php_admin_value设置的配置属于系统级配置,用户态代码根本没有修改权限,这类操作完全无效。
  • 不要只禁用phpinfo就认为防护到位:ini_get()是更直接的敏感值获取渠道,必须同时封堵。
  • 不要把sensitive_ini_entries(或Suhosin对应配置项)设置为可被用户态修改的级别,必须通过php_admin_value或全局php.ini配置,防止恶意代码篡改保护列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 20:12:26