最初接触Zen Cart之时,看到很多源文件头部都有下面这样一段代码:
if (!defined('IS_ADMIN_FLAG')) {
die('Illegal Access');
}
很纳闷!感觉怪怪的,为什么不放在一个公共文件中呢?另外,认为IS_ADMIN_FLAG这个标志,仅仅是用来区分网站管理员后台和前端的。
过来很长一段时间后,才恍然大悟!原来这段代码更是基于安全性来考虑的。Zen Cart呈现一个页面的时候,实际上加载了很多PHP源文件,比如仅仅首页,Zen Cart就加载了100多个PHP源文件。其中有的源文件,包含有操作数据库的逻辑,若没有IS_ADMIN_FLAG这段代码的话,访问者就可以直接在浏览器中输入调用源文件。唉,语言已经不能表述清楚,举例说明。
对于下面的这个源文件:
/includes/modules/meta_tags.php
访问者可以直接调用,如下:
http://www.domain.com/includes/modules/meta_tags.php
假设meta_tags.php中有一些会毁坏数据库的逻辑,或者攻击者构造一些输入参数,把一些机密数据显示出来的话,就很不好了。
Zen Cart在加载文件的最开始部分,首先定义IS_ADMIN_FLAG常量,这样才能保证源文件能作为一个整体被Zen Cart执行。IS_ADMIN_FLAG的定义是存在在下面两个文件中的:
/admin/includes/application_top.php : define('IS_ADMIN_FLAG', true);
/includes/application_top.php : define('IS_ADMIN_FLAG', false);
126次阅读