dedeCMS建站后必做的安全加固与性能优化全攻略
用 dedeCMS(织梦CMS)建站的人不少,但真正把安全和性能做到位的不多。很多站长装完模板、填完内容就直接上线,后台地址不改、默认管理员不删、install 目录不删,结果没过多久网站被挂马、被跳转赌博站,数据库还被拖了。
这篇文章不讲虚的,把我这几年维护 dedeCMS 站点踩过的坑和验证过有效的方案整理出来,从安全加固、性能优化、常见问题排查三个部分说清楚,每一步都带代码和配置,照着做就行。
一、安全加固:先把门锁好
1. 删除或重命名 install 目录
dedeCMS 安装完成后,/install 目录默认还在,这是最大的安全隐患之一。攻击者可以通过重新安装覆盖你的配置文件,直接拿到数据库权限。
处理方式很简单,要么直接删,要么改名:
# 直接删除(推荐)
rm -rf /www/wwwroot/你的站点/install
# 或者改名,需要升级时再改回来
mv /www/wwwroot/你的站点/install /www/wwwroot/你的站点/install_bak
宝塔面板用户在文件管理器里操作也行,效果一样。
2. 修改后台目录名称
dedeCMS 默认后台地址是 /dede,这等于告诉所有人你的后台入口在哪。暴力破解、SQL 注入都从这里入手。
修改方法:
- 把
/dede目录重命名为你自己的名字,比如/admin_aliz88 - 打开
/data/common.inc.php,找到$cfg_dede_dir = 'dede';,改成新目录名 - 清空
/data/cache下的缓存文件
注意:目录名不要用 admin、manage 这种常见词,加一串随机字符更安全。
3. 目录权限设置
很多图省事直接把整个站点设为 777,这是大忌。正确的权限分配应该是:
# 站点根目录和大部分目录设为 755
find /www/wwwroot/你的站点 -type d -exec chmod 755 {} \;
# 所有 PHP 文件设为 644
find /www/wwwroot/你的站点 -name "*.php" -exec chmod 644 {} \;
# 以下目录需要写入权限,设为 755 即可(PHP以www用户运行时)
# /a (HTML生成目录)
# /data (缓存和配置)
# /uploads (上传目录)
# /templets (模板目录,如果需要在线编辑)
# uploads 目录禁止执行 PHP
# 在 /uploads/.htaccess 中添加(Apache)
<FilesMatch "\.php$">
Order Allow,Deny
Deny from all
</FilesMatch>
Nginx 用户在站点配置里加:
location ~* ^/uploads/.*\.(php|php5)$ {
deny all;
}
这一条非常关键,大部分 dedeCMS 被挂马都是通过上传漏洞传了一句话木马到 uploads 目录,然后直接访问执行。禁掉 uploads 的 PHP 执行,即使被传了马也跑不起来。
4. 修补已知漏洞
dedeCMS 官方已经停止更新很久了(最后一个大版本是 V5.7 SP2),但社区一直在出补丁。几个必须补的高危漏洞:
(1)/plus/recommend.php SQL 注入
打开 /plus/recommend.php,找到 $aid = $_GET['aid'];,改成:
$aid = preg_replace("#[^0-9]#", '', $_GET['aid']);
(2)/plus/download.php 任意文件下载
打开 /plus/download.php,在 $open = $_GET['open']; 后面加过滤:
$open = preg_replace("#[^a-z0-9_]#i", '', $open);
if(strpos($open, '..') !== false) exit('Request Error!');
(3)/member/ 会员中心
如果你的站点不需要会员功能,直接把 /member 目录改名或删除,会员模块是 dedeCMS 漏洞重灾区。
5. 后台访问限制
如果你的服务器是固定 IP,或者用了 CDN,可以限制只有特定 IP 能访问后台。Nginx 配置:
location ~* ^/你的后台目录/ {
allow 你的IP;
deny all;
# 配合 PHP 解析
location ~ \.php$ {
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
}
没有固定 IP 也没关系,至少给后台加一层 Basic Auth 密码,宝塔面板的"目录访问"功能一键就能设。
二、性能优化:让网站飞起来
1. 开启伪静态,减少动态请求
dedeCMS 默认生成静态 HTML,这本身是好事,但列表页、搜索页、会员页还是动态的。把列表页也做成静态或伪静态,能大幅减轻 PHP 和 MySQL 的压力。
Nginx 伪静态规则:
location / {
if (!-e $request_filename) {
rewrite "^/list-([0-9]+)-([0-9]+)\.html$" /plus/list.php?tid=$1&PageNo=$2 last;
rewrite "^/view-([0-9]+)-([0-9]+)\.html$" /plus/view.php?arcID=$1&pageno=$2 last;
rewrite "^/search-([0-9]+)-([0-9]+)\.html$" /plus/search.php?keyword=$1&PageNo=$2 last;
}
}
后台 → 系统 → 系统基本参数 → 核心设置,把"是否使用伪静态"设为"是",然后更新系统缓存。
2. 配置页面缓存
dedeCMS 自带的缓存机制比较弱,建议用 Redis 或 Memcached 做一层缓存。如果用宝塔,直接装 Redis 扩展,然后在 /data/config.cache.inc.php 里配置:
$cfg_memcache_enabled = 'Y';
$cfg_memcache_host = '127.0.0.1';
$cfg_memcache_port = '11211';
$cfg_memcache_prefix = 'dede_';
$cfg_cache_time = '3600';
没有 Redis 的话,至少开启 dedeCMS 的文件缓存:后台 → 系统 → 性能选项,把"缓存方式"设为"文件缓存",缓存时间设为 3600 秒。
3. MySQL 优化
dedeCMS 的文章表 dede_archives 和附加表 dede_addonarticle 是查询最频繁的,确保关键字段有索引:
-- 检查索引
SHOW INDEX FROM dede_archives;
SHOW INDEX FROM dede_addonarticle;
-- 常用查询字段加索引
ALTER TABLE dede_archives ADD INDEX idx_typeid_senddate (typeid, senddate);
ALTER TABLE dede_archives ADD INDEX idx_arcrank (arcrank);
ALTER TABLE dede_addonarticle ADD INDEX idx_aid (aid);
MySQL 配置文件 my.cnf 里几个关键参数:
[mysqld]
# 缓冲池大小,设为物理内存的 50%-70%
innodb_buffer_pool_size = 1G
# 查询缓存(MySQL 8.0已移除,5.7可用)
query_cache_type = 1
query_cache_size = 64M
# 连接数
max_connections = 200
# 临时表大小
tmp_table_size = 64M
max_heap_table_size = 64M
# 慢查询日志,排查慢SQL
slow_query_log = 1
slow_query_log_file = /www/server/mysql/slow.log
long_query_time = 2
开启慢查询日志后,跑一周用 mysqldumpslow 分析,把最慢的几条 SQL 找出来优化。dedeCMS 的搜索功能 SQL 写得比较烂,数据量大了一定要单独优化。
4. PHP 优化
PHP 版本建议用 7.4 或 8.0,dedeCMS V5.7 SP2 对 PHP 7.x 兼容没问题,PHP 8 可能需要改几个地方,但性能提升明显。
php.ini 关键配置:
; 内存限制,根据站点情况调整
memory_limit = 256M
; 上传大小
upload_max_filesize = 32M
post_max_size = 32M
; 执行时间
max_execution_time = 60
; OPcache 开启(必开,性能提升30%以上)
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
OPcache 是 PHP 性能优化里投入产出比最高的一项,一定要开。宝塔面板在 PHP 设置 → 安装扩展里一键安装。
5. 图片和静态资源优化
dedeCMS 站点通常图片很多,文章缩略图、图集、附件,不加优化页面加载会很慢。
几个实操建议:
- 上传图片时用后台的"缩略图"功能自动生成合适尺寸,不要把原图直接丢到文章里
- 开启 Nginx 的 gzip 压缩,压缩 CSS、JS、HTML
- 静态资源加过期头,减少重复请求
Nginx 配置:
# gzip 压缩
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_comp_level 6;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/json;
gzip_vary on;
# 静态资源缓存
location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff|woff2|ttf|eot)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
有条件的话接个 CDN(七牛、又拍、阿里云OSS都行),把图片和静态资源全丢 CDN,源站压力能降一大半。
三、常见问题排查
1. 后台空白或 500 错误
最常见的原因是 PHP 版本不兼容或文件权限不对。排查步骤:
- 看 PHP 错误日志:
/www/server/php/版本/var/log/php-fpm.log - 临时在
/data/common.inc.php顶部加error_reporting(E_ALL); ini_set('display_errors', 1);,刷新看具体报错 - 检查
/data、/a目录是否有写入权限 - PHP 7.x 下
/include/helpers/util.helper.php里的each()函数已废弃,需要替换为foreach
2. 生成 HTML 时报错 "DedeTag Engine Create File False"
这个错误 90% 是目录权限问题,/a 目录或对应的栏目目录没有写入权限。解决:
chown -R www:www /www/wwwroot/你的站点/a
chmod -R 755 /www/wwwroot/你的站点/a
如果用的是宝塔,所有者改成 www,不要用 root。
3. 栏目页 404
伪静态规则没生效,或者后台的"栏目命名规则"和 Nginx/Apache 规则不匹配。检查:
- 后台 → 核心 → 栏目管理 → 高级选项,看"文件命名规则"
- 确认 Nginx 的 rewrite 规则和命名规则一致
- 重启 Nginx 后测试
4. 网站被挂马后的处理
如果发现网站被跳转、页面被篡改,按这个顺序处理:
- 立刻关闭网站(Nginx 下
nginx -s stop,或宝塔一键停止) - 备份当前所有文件和数据库(保留证据)
- 用
find /www/wwwroot/你的站点 -name "*.php" -mtime -7找最近 7 天修改过的 PHP 文件 - 搜索一句话木马特征:
grep -r "eval(\$_" /www/wwwroot/你的站点 --include="*.php" - 对比官方原版文件,替换被篡改的文件
- 修改数据库密码、后台密码、FTP 密码
- 按本文第一部分重新做安全加固
- 检查
dede_admin表,删除陌生管理员账号
-- 检查管理员
SELECT id,userid,uname,logintime,loginip FROM dede_admin;
-- 删除可疑账号
DELETE FROM dede_admin WHERE id = 可疑ID;
四、写在最后
dedeCMS 虽然官方不更新了,但作为一个成熟的内容管理系统,用来做资讯站、企业站、素材站依然够用。关键是建站后把安全和性能这两件事做到位,不然就是给攻击者留后门。
上面这些操作我在多个站点上验证过,照着做一遍,安全性和访问速度都能上一个台阶。如果你的站点已经运行了一段时间,建议趁这次机会全面排查一次,特别是 /plus 目录下的文件,很多漏洞都藏在那里。
有问题欢迎在评论区交流,我会尽量回复。
本文配套模板、静态源码可前往艾立兹素材库alisucai.com下载