一文搞懂网站被黑挂马怎么办 遵义网络科技有限公司实战经验
一文搞懂网站被黑挂马怎么办 遵义网络科技有限公司实战经验
网站被黑挂马不知道怎么办?你不是一个人。去年我给遵义一家中小型制造企业做官网时,客户突然发现网站页面跳转到赌博网站,整个团队都慌了。这不是技术问题,这是生存问题。今天我们就用遵义网络科技有限公司的真实项目案例,一文搞懂怎么防黑、怎么排查、怎么恢复,避免踩坑。
项目背景与需求
2024年,遵义一家主营机械设备销售的企业找到了我们,他们的官网使用的是WordPress搭建,前端用的是Elementor,后端没有做严格的权限控制。网站运行了三年多,用户量稳定在每天500人次左右,但没做过任何安全加固。直到客户接到用户投诉,网站页面被篡改成非法链接,这才紧急找我们介入。
客户的核心需求非常明确:
- 快速定位问题:网站被黑,必须立即处理;
- 恢复原貌:不能影响正常业务;
- 防止二次攻击:避免类似事件再次发生;
- 长期安全策略:建立一套可持续的网站安全体系。
这些需求直接指向了网站安全、代码审计、权限管理、服务器配置和日志监控等多个方向。我们从零开始,搭建了一套完整的安全方案。
技术选型
1. 服务器与数据库安全
客户网站的服务器使用的是阿里云ECS,数据库是MySQL。从安全角度来看,我们第一时间做了以下几件事:
- 关闭远程SSH登录:将SSH只允许本地登录或指定IP段访问;
- 修改默认端口:将SSH端口从22改为10022,降低被扫描攻击的概率;
- 启用防火墙:使用阿里云安全组和iptables,只放行HTTP(80)、HTTPS(443)、SSH(10022)和MySQL(3306)端口;
- 升级系统版本:将CentOS升级至最新稳定版本,避免使用过时系统带来的漏洞风险;
- 禁用危险服务:如FTP、Telnet等非必要服务,降低攻击面。
2. CMS与插件管理
网站使用的是WordPress,这是目前全球最流行的CMS之一,但同时也是攻击者的首选目标。我们做了以下几点:
- 更新核心与插件:将WordPress更新到最新版本(当前是6.5.1),并更新所有插件;
- 禁用未使用的插件:如评论插件、访客统计插件等;
- 使用安全插件:安装了Wordfence和iThemes Security,启用实时监控和入侵检测;
- 启用HTTPS:申请了Let's Encrypt免费SSL证书,并强制跳转HTTPS,提升网站安全等级;
- 设置强密码策略:要求管理员密码至少12位,包含大小写字母、数字和符号。
3. 代码安全与审计
我们对整个网站进行了代码审计,使用了PHP Security Checker工具,检测出了几个潜在风险点,比如:
- 某个插件中存在文件包含漏洞;
- 后台登录页面没有做验证码防爆破;
- 未启用WP_DEBUG模式,导致部分错误信息被隐藏。
我们对这些问题进行了修复,并在代码中加入以下安全措施:
// 禁止目录浏览
if (isset($_GET['dir'])) {die("Access denied.");
}// 防止SQL注入
function sanitize_input($data) {$data = trim($data);$data = stripslashes($data);$data = htmlspecialchars($data, ENT_QUOTES, 'UTF-8');return $data;
}// 防止XSS攻击
function sanitize_output($data) {return htmlspecialchars($data, ENT_QUOTES, 'UTF-8');
}
这些代码片段虽小,但可以有效防止常见的安全漏洞。
核心实现:安全加固与恢复方案
1. 日志监控与异常检测
我们为服务器启用了syslog日志记录,并使用Logwatch工具定期分析日志。我们还配置了fail2ban,一旦发现异常登录尝试,会自动封禁IP。
# 安装 fail2ban
sudo apt-get install fail2ban# 配置 fail2ban
sudo nano /etc/fail2ban/jail.local
在配置文件中,我们添加了以下规则:
[sshd]
enabled = true
port = 10022
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 600
这个配置会在SSH登录失败超过3次后,封禁该IP 10分钟,有效防止暴力破解。
2. 网站备份与恢复
为了避免网站被黑后数据丢失,我们建立了自动化备份策略,每天凌晨2点自动备份网站文件和数据库,并将备份文件上传到阿里云OSS。
#!/bin/bash# 定义变量
DATE=$(date +%Y%m%d)
BACKUP_DIR=/backup
SITE_DIR=/var/www/html
DB_NAME=mywebsite
DB_USER=root
DB_PASS=your_password
OSS_BUCKET=my-website-backup
OSS_ACCESS_KEY=your_access_key
OSS_SECRET_KEY=your_secret_key# 备份网站文件
tar -czf ${BACKUP_DIR}/website-${DATE}.tar.gz ${SITE_DIR}# 备份数据库
mysqldump -u ${DB_USER} -p${DB_PASS} ${DB_NAME} > ${BACKUP_DIR}/database-${DATE}.sql# 上传到OSS
ossutil cp ${BACKUP_DIR}/website-${DATE}.tar.gz oss://${OSS_BUCKET}/website/
ossutil cp ${BACKUP_DIR}/database-${DATE}.sql oss://${OSS_BUCKET}/database/
这个脚本会在每天凌晨自动运行,将网站备份文件上传到OSS,确保即使服务器被黑,也能快速恢复。
3. 强化服务器安全配置
我们还对Apache服务器做了安全加固,包括:
禁用目录浏览:
<Directory "/var/www/html">Options -Indexes </Directory>启用HTTP头安全配置:
<IfModule mod_headers.c>Header set X-Content-Type-Options nosniffHeader set X-Frame-Options SAMEORIGINHeader set X-XSS-Protection "1; mode=block" </IfModule>
这些配置可以有效防止点击劫持、XSS攻击和内容嗅探等安全风险。
上线与优化
1. 安全测试与漏洞扫描
在完成所有安全加固后,我们使用了Nessus和Nmap进行渗透测试,检测是否存在未修复的漏洞。
# 使用Nmap进行端口扫描
nmap -p 80,443,10022,3306 -A yourdomain.com# 使用Nessus进行漏洞扫描
nessuscli scan launch --name "Website Security Scan" --target yourdomain.com
测试结果显示,我们的安全配置已经将攻击面缩小到最小,没有发现严重漏洞。
2. 安全策略文档与培训
我们为客户编写了一份《网站安全操作手册》,内容包括:
- 定期更新CMS和插件;
- 禁用未使用的插件;
- 使用强密码策略;
- 定期备份;
- 定期进行安全检查。
我们还对客户的技术人员进行了线上培训,确保他们掌握基本的安全操作。
经验总结
网站安全不是一次性的任务,而是需要持续维护和监控。在遵义网络科技有限公司的这个项目中,我们从零开始,逐步建立了一套完整安全体系,包括:
- 服务器安全配置:关闭远程SSH、修改端口、启用防火墙;
- CMS安全加固:更新核心、禁用插件、使用安全插件;
- 代码安全审计:修复漏洞、防止SQL注入和XSS攻击;
- 日志监控与异常检测:使用fail2ban、Logwatch、syslog;
- 网站备份与恢复策略:自动化备份、OSS存储、快速恢复;
- 安全培训与文档:建立安全操作流程、培训客户团队。
这些经验不仅适用于遵义网络科技有限公司的项目,也适用于其他企业官网、商城、外贸站等网站的安全建设。
你的网站用的什么技术栈?评论区聊聊。