Web系统安全检测实战:大学生代取快递服务系统8大漏洞分析与加固指南
背景说明
最近,我参与了一个“大学生代取快递服务”Web系统的安全性检测项目。系统采用 Go语言 开发,使用了 html/template 模板引擎、MySQL数据库和WebSocket实时通信。本次检测覆盖了 8类常见Web安全风险,包括:
- XSS跨站脚本攻击
- CSRF跨站请求伪造
- 文件上传漏洞
- 弱口令
- 数据库密码不加密
- 越权访问
- SQL注入
- 未授权访问
本文将从检测方法、代码分析、风险评级和加固建议四个维度,详细记录每一类问题的发现与修复思路。
1️⃣ XSS(跨站脚本攻击)
原理简述
XSS攻击指的是攻击者在网页中注入恶意脚本(通常是JavaScript),当其他用户访问时,这些脚本会在其浏览器中执行,可能导致Cookie泄露、会话劫持、页面篡改等。
检测过程
系统使用Go的 html/template 模板引擎,该引擎默认对 {{.Variable}} 输出进行HTML自动转义。
html
{{.Error}}、{{.StudentID}}、{{.Password}}
结果分析
- ✅ 基本防护存在,模板引擎转义有效防止了大部分XSS攻击。
- ⚠️ 建议对富文本字段(如
Description)增加额外的XSS过滤。
风险等级: 低风险
2️⃣ CSRF(跨站请求伪造)
原理简述
CSRF攻击利用用户已登录的状态,诱导用户浏览器发起恶意请求,从而在用户不知情的情况下执行操作(如修改密码、转账等)。
检测过程
检查所有POST表单是否携带 CSRF Token:
login.html、register.html、create.html、detail.html中均未包含 CSRF Token。- 后端
LoginHandler、CreateHandler等均未验证 Token。
结果分析
- ❌ 系统存在CSRF漏洞
- 攻击者可构造恶意页面,诱导已登录用户执行操作。
风险等级: 高风险
加固建议
为所有POST请求添加CSRF Token验证,推荐使用Go的 gorilla/csrf 中间件。
3️⃣ 文件上传漏洞
原理简述
如果网站只校验文件扩展名而不校验文件内容,攻击者可上传伪装成图片的恶意脚本(如 .html、.svg),进而执行XSS或获取服务器权限。
检测过程
UploadImageHandler 仅检查扩展名白名单:
go
filepath.Ext(filename) // .jpg/.jpeg/.png/.gif
未校验文件头Magic Number,未做内容扫描,上传目录可直接访问。
结果分析
- ❌ 存在文件上传风险
- 可上传伪装后的恶意文件。
风险等级: 中风险
加固建议
- 增加文件头Magic Number校验
- 文件随机重命名
- 上传目录禁止脚本执行
4️⃣ 弱口令 & 数据库密码不加密
检测过程
- 数据库连接使用
root:123456,属于极弱口令。 - 注册页面无密码复杂度限制(无最小长度、无字符类型要求)。
- 用户密码明文存储,无哈希、无盐值。
结果分析
- ❌ 严重安全问题
- 数据库泄露将导致所有用户密码直接暴露。
风险等级: 高风险
加固建议
- 使用
bcrypt加盐哈希存储密码 - 修改数据库密码为高强度密码
- 增加密码复杂度策略(长度、大小写、数字、特殊字符)
5️⃣ 越权访问 & 未授权访问
检测过程
/detail/路由未使用AuthMiddleware,未登录用户可查看快递详情(含取件码、手机号等敏感信息)。- 其他受保护路由(如
/take/、/profile)均有登录检查。
结果分析
- ❌ 部分越权风险
- 敏感信息对未授权用户开放。
风险等级: 中风险
加固建议
- 为
/detail/路由添加登录验证 - 或对敏感字段(手机号、取件码)进行脱敏处理
6️⃣ SQL注入
检测过程
所有SQL查询均使用参数化查询(? 占位符),如:
go
db.Query("SELECT * FROM users WHERE student_id = ?", studentID)
结果分析
- ✅ 不存在SQL注入漏洞
- 系统全面使用参数化查询,有效防止注入攻击。
风险等级: 无风险
📊 安全检测汇总表
| 序号 | 检测项目 | 检测结果 | 风险等级 |
|---|---|---|---|
| 1 | XSS | 有基本防护(模板自动转义) | 低风险 |
| 2 | CSRF | 无Token验证 | 高风险 |
| 3 | 文件上传 | 仅校验扩展名 | 中风险 |
| 4 | 弱口令 | 数据库弱密码 + 无密码策略 | 高风险 |
| 5 | 密码不加密 | 明文存储 | 高风险 |
| 6 | 越权访问 | 详情页未受保护 | 中风险 |
| 7 | SQL注入 | 参数化查询 | 无风险 |
| 8 | 未授权访问 | 详情页开放 | 中风险 |
🛠 整体加固建议
- CSRF防护:为所有POST表单添加CSRF Token,使用中间件统一管理。
- 密码安全:
- 使用
bcrypt加盐哈希存储密码 - 数据库密码改为高强度并移入环境变量
- 使用
- 文件上传:
- 校验文件头Magic Number
- 文件随机重命名
- 上传目录禁止脚本执行
- 访问控制:
- 为
/detail/路由添加登录验证或脱敏处理 - 增加密码复杂度策略
- 为
- 安全配置:
- 禁止硬编码数据库凭据,改用环境变量或配置文件
📝 总结
通过本次白盒安全审计,我们发现该“大学生代取快递服务”系统虽然在 SQL注入 和 XSS 方面有较好的基础防护,但在 CSRF、密码安全、越权访问 等方面仍存在明显短板。这些问题如果被恶意利用,可能导致用户数据泄露、账户被盗、服务器被控制等严重后果。
安全不是一项功能,而是一种持续的过程。每一次检测与加固,都是对系统的一次进化。
希望这篇博客能为你在Web安全检测与加固方面提供一些实用的思路和方法。如果你也有类似的系统检测经验,欢迎留言交流~
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)