一、什么是DedeCMS
织梦内容管理系统(DedeCMS),是一个集内容发布、编辑、管理检索等于一体的网站管理系统(Web CMS),他拥有国外CMS众多特点之外,还结合中国用户的需要,对内容管理系统概念进行明确分析和定位。 作为国内第一个开源的内容管理系统,DedeCMS在创建以来都在摸索中国互联网内容管理系统的道路,并且引领众多开源CMS前进的道路,程序由当年个人作品,现已组建团队,在提升用户服务、提高产品质量的同时,对中国网站内容管理系统进行研究,成为目前市场上最受欢迎的内容管理系统。
织梦CMS官方网站:http://www.dedecms.com/
二、下载
官方网站下载 :http://www.dedecms.com/products/dedecms/downloads/
最新版本为DedeCMS V5.7 SP1
下载后解压,包含docs和uploads文件夹,docs文件夹不需要管理,里面主要是版权申明和更新说明等。我们开发主要是了解uploads下内容,其内部结构如下:
三、程序安装
项目入口为index.php
下载dedecms后,当第一次执行程序中index.php文件(localhost/dedecms/),程序就会开始安装。程序安装首先从index.php文件说起,打开该文件我们可以看到,最前面几行代码如下:
GetOne("Select * From `#@__homepageset`");
$row['templet'] = MfTemplet($row['templet']);
$pv = new PartView();
$pv->SetTemplet($cfg_basedir . $cfg_templets_dir . "/" . $row['templet']);
$row['showmod'] = isset($row['showmod'])? $row['showmod'] : 0;
if ($row['showmod'] == 1)
{
$pv->SaveToHtml(dirname(__FILE__).'/index.html');
include(dirname(__FILE__).'/index.html');
exit();
} else {
$pv->Display();
exit();
}
}
else
{
header('HTTP/1.1 301 Moved Permanently');
header('Location:index.html');
}
?>
当common.inc.php文件不存在时候,就执行install/index.php文件,显然是执行安装文件。common.inc.php文件属于配置文件,在实际上线后,我个人觉得,这上面的几行php代码完全可以删除掉,且连同install目录一块删除掉。
四、安装入口
install/index.php文件前面的代码如下:
/**
* @version $Id: index.php 1 13:41 2010年7月26日Z tianya $
* @package DedeCMS.Install
* @copyright Copyright (c) 2007 - 2010, DesDev, Inc.
* @license http://help.dedecms.com/usersguide/license.html
* @link http://www.dedecms.com
*/
@set_time_limit(0); //设置程序相应时间
//error_reporting(E_ALL);
error_reporting(E_ALL || ~E_NOTICE); //设置错误级别
$verMsg = ' V5.7 UTF8SP1'; //定义版本号
$s_lang = 'utf-8';
$dfDbname = 'dedecmsv57utf8sp1'; //数据库名字
$errmsg = '';
$install_demo_name = 'dedev57demo.txt';
$insLockfile = dirname(__FILE__).'/install_lock.txt'; //锁文件
$moduleCacheFile = dirname(__FILE__).'/modules.tmp.inc'; //缓存文件
define('DEDEINC',dirname(__FILE__).'/../include'); //定义根目录下的include目标
define('DEDEDATA',dirname(__FILE__).'/../data'); //定义数据目录
define('DEDEROOT',preg_replace("#[\\\\\/]install#", '', dirname(__FILE__))); //获取网站根目录
header("Content-Type: text/html; charset={$s_lang}"); //设备编码
require_once(DEDEROOT.'/install/install.inc.php'); //加载安装需要的函数文件
require_once(DEDEINC.'/zip.class.php');//加载压缩文件
foreach(Array('_GET','_POST','_COOKIE') as $_request) //对数据进行过滤,并将数组元素转为变量
{
foreach($$_request as $_k => $_v) ${$_k} = RunMagicQuotes($_v);
}
require_once(DEDEINC.'/common.func.php'); //加载dedecms基本函数文件
if(file_exists($insLockfile)) //为了防止重复安装,添加锁文件
{
exit(" 程序已运行安装,如果你确定要重新安装,请先从FTP中删除 install/install_lock.txt!");
}
默认安装步骤是第一步,执行的文件install/templates/step-1.html文件,主要是版权信息。
if(empty($step)) //默认从第一步开始安装
{
$step = 1;
}
if($step==1)
{
include('./templates/step-1.html');
exit();
}
可以从install/templates/step-1.html中代码看出,第二步还是执行index.php文件,只是传递一个step为2的变量。
$phpv = phpversion(); //获取php版本
$sp_os = PHP_OS; //php运行的系统
$sp_gd = gdversion(); //判断GD库版本
$sp_server = $_SERVER['SERVER_SOFTWARE'];
$sp_host = (empty($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_HOST'] : $_SERVER['REMOTE_ADDR']); //获取用户ip,如果ip不存在,就获取主机名
$sp_name = $_SERVER['SERVER_NAME']; //获取服务器主机名称
$sp_max_execution_time = ini_get('max_execution_time'); //判断是否设置了最大执行时间
$sp_allow_reference = (ini_get('allow_call_time_pass_reference') ? '[√]On' : '[×]Off');
$sp_allow_url_fopen = (ini_get('allow_url_fopen') ? '[√]On' : '[×]Off');
$sp_safe_mode = (ini_get('safe_mode') ? '[×]On' : '[√]Off');
$sp_gd = ($sp_gd>0 ? '[√]On' : '[×]Off');
$sp_mysql = (function_exists('mysql_connect') ? '[√]On' : '[×]Off');
if($sp_mysql=='[×]Off')
$sp_mysql_err = TRUE;
else
$sp_mysql_err = FALSE;
$sp_testdirs = array(
'/',
'/plus/*',
'/dede/*',
'/data/*',
'/a/*',
'/install',
'/special',
'/uploads/*'
);
include('./templates/step-2.html');
exit();
在该步骤中,主要是初始化一些默认的设置,如数据库名称、数据表前缀、Cookie加密码等,然后以表单形式提交。
后端界面
备注:
1.字符串中包含变量,使用{}
包含变量,对变量做界定,如”hello{$name}goodmonery”,如果没有界定符就会出错。
2.magic_quotes_gpc,脚本将自动过滤post、get、cookie中数据,如果没有,通过使用addslashes对post、get、cookie中的数据进行过滤。
注意:
dede织梦cms系统的程序存在漏洞,黑客攻击方法层出不穷,导致网站经常被黑,被百度安全中心等拦截,影响排名和流量,让站长非常头疼,下面总结一些防止dede织梦cms系统被攻击设置的方法,可有效的防止织梦系统被挂马,仅供各位站长参考。
1.安装时数据库的前缀不用dedecms默认的前缀dede_,可以改成其他的名称如diy_