SpringBoot论坛系统安全测试实战报告

作者:大飞

项目类型:自研论坛系统

技术栈:SpringBoot + MySQL + Thymeleaf

测试范围:黑盒安全测试(不依赖专业渗透工具)

时间成本:1天可完成所有测试并整理报告

适用场景:面试展示、项目总结、安全入门


一、测试目标

对本人基于SpringBoot开发的论坛系统,进行一轮Web安全测试 。测试重点参考OWASP Top 10漏洞类型,识别常见的安全风险,包括:

  • 输入注入类(XSS、SQL注入等)

  • 认证与会话类(未登录访问、权限绕过)

  • 接口暴露与信息泄露

  • 数据库存储安全

由于时间紧迫,本次测试不依赖Burp Suite、ZAP等安全工具 ,而是使用浏览器、Postman、数据库管理工具、日志文件分析完成。


二、测试环境说明

项目 描述
系统类型 自研论坛系统(支持注册、登录、发帖、私信)
后端框架 Spring Boot
前端模板 Thymeleaf
数据库 MySQL
测试方式 黑盒测试为主(模拟真实攻击)
使用工具 Postman + Chrome + 数据库客户端 + 日志查看器

三、安全测试用例(精选可落地)

1️⃣ 输入校验类

✅ S001 - 登录接口SQL注入
  • 输入:' OR 1=1 --

  • 测试点:SQL注入

  • 结果:页面有警告提示弹窗,标签已转义 ✅

✅ S002 - 注册昵称 XSS 测试
  • 输入<script>alert("XSS")</script>

  • 测试点:注册昵称字段

  • 结果:页面有警告提示弹窗,标签已转义 ✅

❌ S003 - 发帖功能存在严重存储型 XSS 漏洞

  • 测试点:发帖正文字段

  • 操作步骤

    1. 登录任意用户账号,进入发帖页面;

    2. 正文中输入:<script>alert("123")</script>

    3. 发布帖子后刷新页面;

    4. 页面立即弹窗,且之后所有新发的帖子页面也弹出该脚本,证明该代码被原样存储并执行。

  • 漏洞类型存储型 XSS(Stored Cross Site Scripting)

  • 影响等级:高危 🔥

  • 风险描述

    • 攻击者可插入任意脚本,包括盗取登录用户的Cookie,伪造请求(如发帖、私信),劫持会话;

    • 所有访问该贴的用户都将受影响;

    • 可进一步造成蠕虫式传播(如自动发帖携带XSS代码);

  • 漏洞原因

    • 服务端未对用户输入进行HTML转义或过滤;

    • 前端渲染时未使用安全的输出机制(如 th:text 而非 th:utext);

  • 安全建议

    • 后端输出转义 :使用 StringEscapeUtils.escapeHtml4() 或框架内建HTML转义工具;

    • 模板引擎渲染时使用 th:text,避免将用户输入当HTML渲染;

    • 可选增强:接入XSS过滤库(如 ESAPI、HtmlSanitizer)清除非法标签;

    • 安全测试建议:加入XSS Payload字典,覆盖注册、发帖、私信等所有富文本输入点进行回归测试。


✅ S005 - 超长字符串输入测试
  • 输入:昵称字段填入1万个字符

  • 结果 :系统提示"错误",未崩溃 ✅


2️⃣ 认证与权限类

✅ S009 - 未登录访问受限接口
  • 测试点 :直接访问 /user/profile

  • 结果:自动跳转登录页 ✅

✅ S011 - 水平越权删除他人帖子
  • 操作 :A用户登录,构造删除请求 post/delete?id=2(ID为B用户帖子)

  • 结果:提示无权限,操作失败 ✅

✅ S012 - 垂直越权修改管理员信息
  • 操作 :普通用户用Postman访问 /admin/update

  • 结果 :返回Whitelabel Error Page,禁止访问 ✅

✅ S014 - 无Token访问私密接口
  • 测试点 :访问 /api/private/data 不带Token

  • 结果 :接口返回Whitelabel Error Page ✅


3️⃣ 数据存储与接口安全类

✅ S015 - 密码加密存储检查
  • 查看 :MySQL user

  • 结果 :密码字段为加密串(疑似 BCrypt),无明文存储 ✅

✅ S016 - 注册接口返回字段检查
  • 测试点:注册成功后接口响应

  • 结果:未返回敏感字段,如密码、盐、token等 ✅

✅ S017 - 日志信息是否泄露敏感数据
  • 操作:多次输错密码,触发报错

  • 查看:控制台 + 日志文件

  • 结果:日志未打印用户输入 ✅

✅ S020 - 特殊符号输入处理测试
  • 输入'&*%$#<>

  • 测试点:发帖、注册、修改资料字段

  • 结果 :正常显示或被提示非法字符,未发生异常 ✅

✅ S021 - 事务一致性测试
  • 操作:发帖接口模拟异常(人为断网、字段缺失)

  • 结果:系统回滚,数据库无半条帖子 ✅


四、结论与建议

漏洞类型 状态 说明
存储型 XSS ❌ 存在严重漏洞 发帖功能存在存储型 XSS,脚本被存储进数据库并原样输出,可被利用盗Cookie、控制页面逻辑
输入校验 ✅ 合格 大部分字段具备长度限制、符号处理,未发现SQL注入/崩溃情况
会话控制 ✅ 合格 未登录访问私密接口被正确拦截,未发生Token越权等问题
权限控制 ✅ 合格 普通用户无法访问管理接口、删除他人数据等高权限行为
数据库存储安全 ✅ 合格 密码加密存储、日志无敏感信息泄露,注册响应未暴露内部字段
相关推荐
zwjapple27 分钟前
docker-compose一键部署全栈项目。springboot后端,react前端
前端·spring boot·docker
tan180°2 小时前
MySQL表的操作(3)
linux·数据库·c++·vscode·后端·mysql
DuelCode3 小时前
Windows VMWare Centos Docker部署Springboot 应用实现文件上传返回文件http链接
java·spring boot·mysql·nginx·docker·centos·mybatis
优创学社23 小时前
基于springboot的社区生鲜团购系统
java·spring boot·后端
why技术3 小时前
Stack Overflow,轰然倒下!
前端·人工智能·后端
幽络源小助理4 小时前
SpringBoot基于Mysql的商业辅助决策系统设计与实现
java·vue.js·spring boot·后端·mysql·spring
猴哥源码4 小时前
基于Java+springboot 的车险理赔信息管理系统
java·spring boot
ai小鬼头5 小时前
AIStarter如何助力用户与创作者?Stable Diffusion一键管理教程!
后端·架构·github
简佐义的博客5 小时前
破解非模式物种GO/KEGG注释难题
开发语言·数据库·后端·oracle·golang