手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表Tag:include

[转]老王:如何安全的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

远程包含和本地包含漏洞的原理

我们来讨论包含文件漏洞,首先要问的是,什么才是"远程文件包含漏洞"?回答是:服务器通过php的特性(函数)去包含任意文件时,由于要包 含的这个文件来源过滤不严,从而可去包含一个恶意文件,而我们可以构造这个恶意文件来达到邪恶的目的。几乎所有的 cgi程序都有这样的 bug,只是具体的表现方式不一样罢了。

» 阅读全文

Tags: require, include