别担心,我们可以系统地解决这个问题,下面我将从 “紧急处理 -> 根本原因 -> 长期防护” 三个方面,为你提供一份详细的解决方案。

(图片来源网络,侵删)
紧急处理:立即止损
如果你的网站已经被攻击,请立刻按照以下步骤操作,防止情况恶化。
立即删除恶意数据
登录你的网站后台,找到“自定义表单管理”。
- 删除所有恶意记录:选中所有垃圾、异常的提交数据,然后点击“删除”。
- 清空表单:如果数据量太大,或者你确定这个表单暂时不需要,可以直接在表单管理里找到对应的表单,点击“清空所有数据”,这是最快的方法,但会删除所有历史数据。
检查并修改网站密码
黑客可能通过暴力破解或其他方式获取了你的后台密码。
- 立即修改后台管理密码:使用一个足够复杂的密码(包含大小写字母、数字、特殊符号)。
- 修改FTP/主机面板密码:这是非常重要的,如果主机密码被泄露,黑客可以再次上传恶意文件。
- 修改数据库密码:在
data/common.inc.php文件中检查数据库用户名和密码,确保它也是一个强密码。
检查并清理后门文件
黑客可能会在网站里留下后门文件,以便他们随时可以再次进入。

(图片来源网络,侵删)
- 重点检查目录:
/data/目录:这是织梦的核心目录,黑客喜欢在这里创建文件,如config.php,cache.php等,仔细检查该目录下是否有你不认识的、最近修改过的PHP文件。/member/和/dede/(后台目录):检查是否有异常的PHP文件。- 网站根目录:检查是否有奇怪的文件,比如名为
shell.php,php,info.php等。
- 使用工具扫描:你可以使用一些在线的网站安全检测工具(如:奇安信、腾讯云、安全狗等)对你的网站进行扫描,它们通常会能发现可疑文件。
暂时关闭表单功能
如果暂时不需要这个表单,这是最有效的临时方法。
- 方法一(推荐):在后台的自定义表单管理中,找到对应的表单,将其状态设置为“禁用”。
- 方法二:直接在网站代码中找到表单的HTML部分(通常是
plus/diy.php调用),暂时注释掉或删除相关代码。
根本原因:为什么会攻击?
了解原因才能有效预防,织梦自定义表单被攻击,核心原因只有一个:存在安全漏洞,让黑客可以随意提交数据,而你的程序没有进行严格的验证和过滤。
常见漏洞点:
- 缺少验证码(CAPTCHA):这是最基本也是最重要的防护,没有验证码,黑客就可以用程序(机器人)无限次、自动地提交垃圾信息。
- 没有字段长度和类型限制:黑客可以在“留言内容”等字段中提交超长的字符串,可能导致数据库溢出或服务器资源耗尽,他们也可以提交包含恶意代码(如SQL注入、XSS跨站脚本)的内容。
- 表单提交地址暴露:织梦自定义表单的提交地址通常是
plus/diy.php,黑客知道这个地址,就可以直接向它发送POST数据,而无需经过你网站上的表单页面。 - 织梦版本过旧:你使用的织梦CMS版本可能非常老旧,其中包含许多已知的、未修复的安全漏洞,官方不会为旧版本提供安全补丁。
长期防护:如何彻底解决
为了彻底解决这个问题,你需要从技术和管理上进行加固。

(图片来源网络,侵删)
核心修复与加固
这是最重要的一步,直接解决表单自身的安全问题。
(1)为表单添加或强化验证码
- 检查现有验证码:在你调用表单的模板文件(通常是
templets/你的模板/plus/diyform.htm)中,找到<form>标签,确保里面有这样的代码:<input type="hidden" name="dede_fields" value="..." /> <input type="hidden" name="dede_fieldshash" value="..." /> **<div class="dede-form-item"> <label>验证码:</label> {dede:validatecode/} <input type="text" name="vdcode" class="text" style="width:50px;text-transform:uppercase;" /> </div>**如果没有,请手动添加。
{dede:validatecode/}这句会生成验证码图片。 - 后台开启验证码:登录织梦后台 -> 系统 -> 系统基本参数 -> 核心设置,找到“验证码安全设置”,确保“自定义表单启用验证码”选项是“是”。
(2)严格限制字段内容和长度
- 修改处理文件
plus/diy.php:这是表单数据提交的核心处理文件,你需要找到对每个字段进行处理和入库的代码段(通常在文件末尾),并添加过滤和长度限制。 - 示例代码(添加在
$diy->save()之前):// 假设你的表单有一个名为 "msg" 的留言内容字段 if(isset($_POST['msg'])) { // 1. 过滤HTML和PHP标签,防止XSS攻击 $msg = htmlspecialchars($_POST['msg'], ENT_QUOTES); // 2. 限制长度,比如最多500个字符 if(mb_strlen($msg) > 500) { showMsg('留言内容不能超过500个字符!', '-1'); exit(); } // 3. 可以再添加一些敏感词过滤 $sensitive_words = array('垃圾', '广告', '赌博'); foreach ($sensitive_words as $word) { if (strpos($msg, $word) !== false) { showMsg('留言内容包含敏感词!', '-1'); exit(); } } // 将处理后的数据重新赋值给POST数组 $_POST['msg'] = $msg; }你需要对所有可以自由输入的字段都进行类似的处理。
(3)隐藏或保护表单提交地址
- 前端混淆:不要直接在HTML里写明
action="plus/diy.php",你可以用JavaScript动态设置,或者使用一个中间页面来转发请求,增加黑客直接攻击的难度。 - 后端验证Referer:在
plus/diy.php的开头,添加代码检查请求是否来自你自己的网站页面,防止外部直接提交。// 在 plus/diy.php 文件开头,PHP代码开始处添加 if (isset($_SERVER['HTTP_REFERER'])) { $referer = $_SERVER['HTTP_REFERER']; $your_domain = '你的网站域名'; // 'www.yoursite.com' if (strpos($referer, $your_domain) === false) { header('HTTP/1.1 403 Forbidden'); echo 'Access Denied'; exit(); } } else { header('HTTP/1.1 403 Forbidden'); echo 'Access Denied'; exit(); }
升级与维护
- 升级到最新安全版本:如果你的网站还在运行非常古老的织梦版本(如DedeCMS 5.7及以下),强烈建议你升级到最新的、有安全更新的版本。(注意:升级前务必备份整个网站和数据库!)
- 使用安全插件:可以考虑安装一些织梦的安全防护插件,它们可以提供防火墙、防SQL注入、防CC攻击等功能。
- 定期备份数据:养成定期备份网站文件和数据库的习惯,一旦被攻击,可以快速恢复到正常状态,将损失降到最低。
| 阶段 | 核心任务 | 具体操作 |
|---|---|---|
| 紧急处理 | 立即止损 | 删除恶意数据 修改所有密码(后台、FTP、数据库) 查杀后门文件 暂时关闭表单功能 |
| 根本原因 | 分析漏洞 | 缺少验证码 无字段限制(长度、内容) 提交地址暴露 版本过旧,有已知漏洞 |
| 长期防护 | 彻底解决 | 技术加固: - 添加/强化验证码 - 修改 plus/diy.php,过滤和限制字段内容- 保护表单提交地址 系统维护: - 升级到最新安全版 - 使用安全插件 - 定期备份 |
请按照这个流程一步步操作,你的织梦自定义表单安全问题就能得到根本性的解决,网站安全是一个持续的过程,需要时刻保持警惕。
