手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表2014年03月8日的文章

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

大多数人会将一个单独的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