核心安全原则
在开始之前,请记住所有安全措施的核心原则:

(图片来源网络,侵删)
- 保持更新:及时更新到最新稳定版,官方会修复已知漏洞。
- 最小权限:确保文件和目录权限设置得尽可能小。
- 最小化暴露:不必要的服务、文件、功能都应关闭或隐藏。
- 定期备份:这是最后的防线,务必定期备份网站文件和数据库。
核心文件与目录权限加固
这是最基础也是最重要的一步,不正确的权限是黑客提权的首要途径。
| 目录/文件 | 推荐权限 | 说明 |
|---|---|---|
| 网站根目录 | 755 |
所有者可读写执行,组和其他用户可读执行。 |
/data 目录 |
755 或 750 |
极其重要! 此目录存放配置文件和缓存,禁止Web用户写入。 |
/data 目录下的文件 |
644 |
配置文件(如 config_db.php)和缓存文件,只读。 |
/include 目录 |
755 |
包含核心程序文件,禁止Web用户写入。 |
/templets 目录 |
755 |
模板目录,禁止Web用户直接写入新模板。 |
上传目录 (如 /uploads) |
755 |
特别注意! 上传目录本身不应有执行权限,但子目录需要。 |
| 上传目录下的文件 | 644 |
上传的图片、附件等文件,不应有执行权限。 |
/dede (后台目录) |
755 |
后台管理目录,禁止Web用户写入。 |
/plus 目录 |
755 |
功能模块目录,禁止Web用户写入。 |
index.php 等入口文件 |
644 |
标准PHP文件权限。 |
如何设置权限?
-
通过FTP/SFTP客户端 (如 FileZilla, Xftp):
- 右键点击文件或目录。
- 选择“文件权限” (File permissions)。
- 勾选对应的“读”、“写”、“执行”权限,或直接输入数字(如
755)。
-
通过Linux命令行 (如果您的服务器支持SSH):
(图片来源网络,侵删)# 设置目录权限 find /path/to/your/dedecms -type d -exec chmod 755 {} \; # 设置文件权限 find /path/to/your/dedecms -type f -exec chmod 644 {} \; # 单独设置data目录权限 chmod -R 755 /path/to/your/dedecms/data chmod -R 644 /path/to/your/dedecms/data/*
后台安全加固
后台是网站管理的核心,是攻击的主要目标。
修改后台默认目录名
-
方法:登录FTP,将
/dede文件夹重命名为一个复杂的、不易猜测的名字,如myadmin_x8k9f。 -
注意:重命名后,您需要修改
/include/config_base.php文件中的后台路径配置。// 在 config_base.php 中找到类似下面这行 // $cfg_cmspath = '/'; // 网站根目录 // $cfg_admindir = 'dede'; // 管理目录名 // 将 'dede' 修改为你的新目录名 $cfg_admindir = 'myadmin_x8k9f';
修改后台默认登录地址
-
方法:修改
/include/common.inc.php文件,在文件末尾添加以下代码:
(图片来源网络,侵删)// 自定义后台登录验证码 define('ADMIN_FILE_LOGIN', 'login.php'); // 默认是 login.php // 如果你想完全改变登录入口,可以重命名 login.php,并在这里定义新的文件名 // 你将 login.php 重命名为 mylogin.php // define('ADMIN_FILE_LOGIN', 'mylogin.php');更简单的方法是直接重命名
dede/login.php为一个你自己的文件名,如dede/mylogin.php,这样,登录地址就变成了你的域名/新后台目录/mylogin.php。
强制后台全站HTTPS访问
- 方法:在
/include/common.inc.php文件开头添加以下代码,强制所有非HTTPS请求跳转到HTTPS。if(substr($_SERVER['SERVER_PORT'],0,1) != 4 && substr($_SERVER['HTTP_X_FORWARDED_PROTO'],0,5)!='https') { $https_url = 'https://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; header("Location: $https_url"); exit(); }
关闭后台入口文件验证码
- 风险:默认情况下,后台登录和找回密码等操作需要验证码,但验证码图片本身可能被利用。
- 方法:进入后台 -> 系统 -> 系统基本参数 -> 安全设置 -> 将“后台验证码”设置为“否”。(此操作有风险,请确保您能记住密码)
修改默认管理员账号和密码
- 方法:
- 登录后台。
- 进入“系统” -> “SQL命令行工具”。
- 选择“多行命令”,输入以下SQL代码,将
admin和新密码替换为你自己的信息。UPDATE `dede_admin` SET `userid`='your_new_admin', `pwd`=MD5('your_new_password') WHERE `userid`='admin'; - 点击“查询”执行。
数据库安全
修改数据库默认表前缀
- 风险:默认表前缀是
dede_,攻击者可以利用SQL注入漏洞直接操作所有dede_开头的表。 - 方法:
- 安装时修改:在全新安装织梦CMS时,安装界面有选项可以修改表前缀。
- 已安装网站修改:
- 备份数据库!
- 使用phpMyAdmin等工具,重命名所有
dede_开头的表为你自己的前缀(如myweb_)。 - 修改
/data/config_db.php文件中的$cfg_dbprefix值。 - 检查并修改所有配置文件(如
/dede/config.php)中可能存在的硬编码表前缀。
修改数据库默认用户名和密码
- 方法:使用phpMyAdmin登录数据库,找到
dede_admin表(或你自定义前缀的管理员表),找到userid和pwd字段,直接修改userid,并将pwd字段的值更新为你的新密码的MD5值,可以使用在线MD5加密工具生成。
漏洞与利用点修复
会员/投稿漏洞 (如 /member/ 目录下的漏洞)
- 问题:早期版本中,会员中心存在文件上传、SQL注入等漏洞。
- 解决方法:
- 升级到最新版:官方会修复这些漏洞。
- 关闭会员功能:如果网站不需要会员功能,可以直接删除或重命名
/member目录。 - 限制投稿目录权限:确保
/member/目录及其子目录没有写入权限,只保留必要的运行权限。
代码执行漏洞 (如 plus/diy.php)
- 问题:
plus/diy.php文件在早期版本中存在严重的代码执行漏洞,允许黑客上传Webshell。 - 解决方法:
- 升级到最新版:这是最根本的解决方法。
- 谨慎使用自定义表单:如果不需要,可以删除或重命名
diy.php。 - 给文件加上
<?php exit;?>:如果必须保留,可以在文件最开头添加<?php exit;?>,使其无法直接访问,只能被其他程序包含调用。
通用防注入防上传
-
方法:在
/include/common.inc.php文件开头,加入以下强大的安全过滤代码(注意:此代码可能与某些插件冲突,使用前请备份)。// 防止SQL注入 if (isset($_GET['rid'])) { $_GET['rid'] = preg_replace('/[^0-9]/', '', $_GET['rid']); } // 防止XSS攻击 if (isset($_SERVER['REQUEST_URI'])) { $_SERVER['REQUEST_URI'] = htmlspecialchars($_SERVER['REQUEST_URI'], ENT_QUOTES); } // 防止文件上传漏洞 $file_name = isset($_FILES['upfile']['name']) ? $_FILES['upfile']['name'] : ''; if ($file_name) { $ext = strtolower(substr(strrchr($file_name, '.'), 1)); $deny_ext = array('php', 'php3', 'php4', 'php5', 'phtml', 'jhtml', 'pl', 'py', 'asp', 'jsp', 'sh', 'cgi'); if (in_array($ext, $deny_ext)) { header('HTTP/1.1 403 Forbidden'); exit('Forbidden'); } }
服务器环境安全
关闭PHP危险函数
- 方法:在
php.ini配置文件中,找到disable_functions选项,添加以下函数名。disable_functions = phpinfo, passthru, exec, system, chroot, scandir, chgrp, chown, shell_exec, proc_open, proc_get_status, ini_alter, ini_restore, dl, openlog, syslog, readlink, symlink, popepassthru, stream_socket_server, fsocket, curl_exec, curl_multi_exec, parse_ini_file, show_source
修改后需要重启Web服务(如Apache或Nginx)。
使用Nginx的防规则 (如果使用Nginx)
在Nginx的配置文件中,可以添加一些规则来阻止恶意请求。
# 防止SQL注入
location ~* "(union|select|insert|delete|update|drop|from|where|\.\.)" {
return 403;
}
# 防止脚本文件上传
location ~* \.(php|php5)$ {
# ... 其他配置 ...
# 确保上传目录下的PHP文件无法执行
location ~* ^/uploads/.*\.(php|php5)$ {
deny all;
}
}
# 防止访问敏感文件
location ~* \.(ini|conf|php|jsp|asp|sh)$ {
deny all;
}
定期维护与监控
- 定期备份:使用插件或手动方式,每周至少备份一次网站文件和数据库,并将备份文件保存在本地或安全的云存储中。
- 关注安全资讯:关注织梦官方论坛、安全厂商(如知道创宇、漏洞盒子)的公告,及时了解最新漏洞并打补丁。
- 使用安全扫描工具:定期使用安全扫描工具(如安全狗、360网站卫士)或在线扫描服务检查网站是否存在漏洞和后门。
- 监控网站文件:使用服务器工具(如
inotifywait)或WAF(Web应用防火墙)来监控关键目录(如/data,/uploads)的文件变化,一旦有异常写入立即报警。
织梦CMS的安全是一个持续的过程,没有一劳永逸的解决方案,请按照以上步骤,从基础权限加固开始,逐步完善后台、数据库和服务器环境,并养成定期备份和关注安全的良好习惯,对于新项目,强烈建议考虑使用更现代、安全机制更完善的CMS(如WordPress, Typecho, Ghost等)。
