背景说明

最近,我参与了一个“大学生代取快递服务”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.htmlregister.htmlcreate.htmldetail.html 中均未包含 CSRF Token。
  • 后端 LoginHandlerCreateHandler 等均未验证 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 未授权访问 详情页开放 中风险

🛠 整体加固建议

  1. CSRF防护:为所有POST表单添加CSRF Token,使用中间件统一管理。
  2. 密码安全
    • 使用 bcrypt 加盐哈希存储密码
    • 数据库密码改为高强度并移入环境变量
  3. 文件上传
    • 校验文件头Magic Number
    • 文件随机重命名
    • 上传目录禁止脚本执行
  4. 访问控制
    • /detail/ 路由添加登录验证或脱敏处理
    • 增加密码复杂度策略
  5. 安全配置
    • 禁止硬编码数据库凭据,改用环境变量或配置文件

📝 总结

通过本次白盒安全审计,我们发现该“大学生代取快递服务”系统虽然在 SQL注入XSS 方面有较好的基础防护,但在 CSRF、密码安全、越权访问 等方面仍存在明显短板。这些问题如果被恶意利用,可能导致用户数据泄露、账户被盗、服务器被控制等严重后果。

安全不是一项功能,而是一种持续的过程。每一次检测与加固,都是对系统的一次进化。

希望这篇博客能为你在Web安全检测与加固方面提供一些实用的思路和方法。如果你也有类似的系统检测经验,欢迎留言交流~

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐