背景 最近在一个授权测试项目里复现了一处典型的 Web 业务漏洞。漏洞本身并不复杂,但它比较适合作为代码审计和漏洞复现的案例:入口看起来是普通查询接口,后端使用了 ORM,但在局部代码里为了拼接动态条件退回了字符串拼接,最终造成可控参数进入 SQL 片段。 这类问题在真实项目里很常见:主框架是安全的,基础库也比较规范,但业务开发为了快速实现筛选、排序、导出等功能,在某些边角逻辑里绕过了统一封装。本文整理复现思路、定位方式和修复建议,重点放在授权环境下的分析流程,不涉及未授权攻击或破坏性操作。 问题场景 目标系统提供了一个列表查询接口,用于后台运营人员查看订单记录。接口支持按状态、时间、关键字查询,同时支持前端传入排序字段和排序方向。 GET /api/order/list?status=paid&keyword=test&sortField=create_time&sortOrder=desc从功能设计上看,查询参数大致分为两类: 值类型参数:如 status、keyword、startTime、endTime,通常进入 where 条件。 结构类型参数:如 s
背景文件上传一直是 Web 安全里比较容易被低估的功能点。很多业务侧认为“只要限制后缀名就够了”,但在真实项目里,上传链路往往同时涉及前端校验、后端解析、对象存储、CDN 回源、图片处理组件、异步任务和访问控制。任何一个环节处理不一致,都可能把一个普通上传点变成风险入口。这篇文章不讨论攻击利用细节,也不提供绕过型 payload。主要结合日常代码审计和漏洞复现经验,整理一套适合研发、安全测试、应急排查使用的分析方法,重点放在如何识别风险、如何复现验证、如何修复和回归。典型场景常见的上传功能包括头像上传、附件上传、工单截图、富文本图片、导入模板、插件包上传等。风险通常不是来自“上传”这个动作本身,而是来自上传后的处理链路。上传文件是否被保存到 Web 可访问目录。服务端是否只依赖文件名后缀判断类型。是否允许用户控制保存路径、文件名或扩展名。是否对压缩包、文档、图片进行二次解析。下载或预览接口是否存在越权访问。对象存储桶权限是否过宽。异步处理任务是否存在命令拼接、模板注入或解析器漏洞风险。审计时不要只看上传接口,还要追踪文件从进入系统到被访问、处理、删除的完整生命周期。问题拆解一个较完整的
背景 接口鉴权问题在代码审计里非常常见,但实际危害往往被低估。很多系统表面上有登录态、网关鉴权、角色菜单控制,真正落到业务接口时却只做了“是否登录”的判断,没有验证当前用户是否有权限访问目标资源。 这类问题不一定表现为传统意义上的漏洞利用链,但在真实业务中影响很直接:越权查看订单、修改他人资料、导出不属于自己的数据,甚至触发后台流程。本文整理一次典型接口鉴权缺陷的审计思路,重点放在如何发现、确认和修复,避免提供攻击性操作引导。 问题场景 审计对象是一个常见的 Java Web 后台系统,技术栈大致如下: Spring Boot + Spring MVC JWT 登录态 MyBatis 访问数据库 前端基于菜单权限展示不同页面 部分接口在网关层校验 Token 是否有效 系统中存在多个资源型接口,例如订单、工单、客户资料、附件下载等。前端菜单权限做得比较完整,但后端部分接口只依赖前端传入的 ID 查询数据,没有绑定当前登录用户或组织范围。 技术分析 审计时先看全局鉴权链路。系统使用拦截器解析 JWT,并把用户信息写入上下文: public class AuthInterceptor im
背景文件上传是 Web 系统里很常见的功能,头像、附件、工单截图、文档导入都会用到。也正因为入口常见、数据不可控,上传点一直是代码审计和渗透测试中优先关注的位置。这篇文章结合我在审计业务系统时经常遇到的问题,整理一套相对完整的分析思路和防护链路。重点不是讲“如何利用”,而是说明为什么某些写法不可靠,以及在工程上如何把风险压下去。常见问题场景很多上传漏洞并不是单点失误,而是多个环节同时薄弱造成的。常见场景包括:仅通过前端限制文件后缀,后端没有重新校验。后端只判断文件名后缀,没有校验 MIME、文件头、内容特征。上传目录位于 Web 可访问路径下,并且服务器可能解析动态脚本。文件名直接使用用户输入,导致路径穿越、覆盖文件或特殊字符问题。图片处理、压缩、解压等二次处理逻辑缺少边界控制。权限控制缺失,普通用户可以上传到全站公共目录。在真实项目中,最危险的情况通常是“上传目录可访问 + 文件类型校验薄弱 + Web 容器存在错误解析配置”。这类组合风险需要从代码和部署两侧一起看。技术分析先看一段比较典型的问题代码,示例使用 Java Spring 风格,其他语言也类似。public String