如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留链接信息。

在上一篇文章中,苏南大叔打印了php的全局变量$_ENV。瞬间就被雷到了,可以说这个$_ENV变量,真心有泄露服务器敏感信息的嫌疑。因为里面列出了不少和php不相关的环境变量内容。比如苏南大叔测试机上面的node或者java相关的环境变量设置等。也许暂时还没有想到如何利用这个漏洞。但是出于安全角度出发,苏南大叔认为:还是应该禁用这个$_ENV变量才对。

修改php.ini

为了禁用掉$_ENV变量,在php.ini中,需要找到如下设置:variables_order。默认情况下,这个值是:EGPCS。其中的E就表示$_ENV。所以,苏南大叔把variables_order改为GPCS。这样设置保存后,再次访问$_ENV变量的时候,$_ENV就显示为空,不会泄露敏感信息了。

variables_orderEGPCS敏感信息数组
variables_orderGPCS空数组

深入理解php全局变量$_ENV的安全性问题 - phpini_varorder
深入理解php全局变量$_ENV的安全性问题(图2-1)

是否会影响getenv()函数呢?

苏南大叔认为,这个肯定是会有的。不过正常情况下,使用export导入的环境变量,还是能够使用getenv()函数获取的。所以,对于正常的应用来说,这个并没有什么影响。

www服务的启动命令:

export aaa=bbb && php -S localhost:9001 -t ./ -c php.ini

检测专用php代码:

echo "<pre>";
var_dump($_ENV);
echo getenv("aaa");

php.ini中的设置:

variables_order = "GPCS"

截图显示,我们的代码getenv()依然可以检测到export设置的相关环境变量参数值。

深入理解php全局变量$_ENV的安全性问题 - phpini_varorder2
深入理解php全局变量$_ENV的安全性问题(图2-2)

总结

为了安全性考虑,关闭$_ENV全局变量,不乏是个好的措施。更多php相关经验文章。请点击下面这个链接支持苏南大叔。

 【源码】代码片段及相关软件点此获取

 【php】秘籍文章入口,仅传授于有缘之人   php    env

本站的忠实读者小伙伴,正在阅读下面这些文章:

欢迎转载传播本篇原创文章,转载请保留链接及作者信息。
欢迎指正文字或逻辑错误,将会择优在文末列出您的信息。
本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
未经许可,规模化镜像抄袭本站内容的行为,将会根据有关法律法规进行维权。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。

苏南大叔需要你的支持

感谢您的打赏,让我更有动力,将更多精彩教程文章,呈现给大家!谢谢!