手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆

[转]老王:如何安全的include文件

首页 > PHP >

大多数人会将一个单独的php文件当成配置文件,早些年的配置文件大多类似这样:

PHP代码
  1. <?php  
  2. $config['a']=1;  
  3. $config['b']=2;  

这样include后。可以使用$config变量了,但慢慢的,却越来越发现这样不太好,于是就有了这种

PHP代码
  1. <?php  
  2. return array(  
  3. 'a'=>1,'b'=>2  
  4. );  

这时候只要写$config = include('config.php'),就相当于和上面一样了。然后老王讲的就是指第二种情况。

原文在:http://huoding.com/2014/02/25/329

他举的例子是:

PHP代码
  1. <?php  
  2.   
  3. $debug = false;  
  4. // ...  
  5. $config = include 'config.php';  
  6. // ...  
  7. if ($debug) {  
  8.     phpinfo();  
  9. }  

如果config.php里万一写了$debug=true;那么就会造成phpinfo()被输出了,与实际预料就有了偏差了。那么怎么安全的include呢?

老王说:

PHP代码
  1. $config = call_user_func(function() {  
  2.     return include 'config.php';  
  3. });  

这样就利用局部变量把里面的一些可能污染外部的变量控制在匿名函数的作用域里。

然后我自己也测试了一下,确实。即使用$GLOBALS,也没有影响,而单独的php文件,如果你不是function ,也不能直接global $debug;这样是语法错误的。

所以。。。。如果为了安全,你还是和老王学一下吧。。。




本站采用创作共享版权协议, 要求署名、非商业和保持一致. 本站欢迎任何非商业应用的转载, 但须注明出自"易栈网-膘叔", 保留原始链接, 此外还必须标注原文标题和链接.

Tags: include

« 上一篇 | 下一篇 »

只显示10条记录相关文章

远程包含和本地包含漏洞的原理 (浏览: 23341, 评论: 2)

1条记录访客评论

非常不错,学习了

Post by fifsky on 2014, May 23, 8:10 PM 引用此文发表评论 #1


发表评论

评论内容 (必填):