背景文件上传是 Web 系统里很常见的功能:头像、附件、导入文件、工单截图、富文本图片等都会涉及。它看起来只是一个业务功能,但在实际审计和应急里,上传点经常是漏洞链的入口。比较典型的风险包括:上传可执行脚本、路径穿越覆盖文件、解析差异导致脚本执行、图片二次渲染缺失导致恶意内容保留、对象存储权限配置不当,以及上传后的文件被业务再次处理时触发解析漏洞。这篇文章不讨论攻击利用细节,而是从代码审计和防护落地的角度,整理一套比较稳妥的检查思路。适合在做 Web 安全评审、上线前审计、历史系统加固时作为参考清单。常见问题场景审计上传功能时,我通常不会只看“是否限制后缀”。真实项目里,很多风险是多点叠加造成的。下面这些场景比较常见:只在前端限制文件类型,后端没有严格校验。后端仅通过文件后缀判断类型,未检查 MIME、文件头和实际内容。上传目录位于 Web 可访问路径下,并且服务器可能解析动态脚本。文件名直接使用用户输入,存在路径穿越、覆盖、特殊字符解析问题。允许用户控制保存路径、回调地址、对象存储 key。图片上传后没有重新编码,原始文件被直接保存。导入类功能会对上传文件进行解压、解析 XML、解析
背景在日常代码审计里,越权问题一直是比较容易被低估的一类漏洞。它不像命令执行、反序列化那样“显眼”,但在业务系统中影响往往很直接:普通用户可以查看或修改其他用户的数据,运营角色可以触达管理员接口,或者租户之间的数据边界被打穿。这篇文章整理一次比较典型的 Spring Boot 接口越权排查过程,重点放在审计思路、复现验证和修复建议上。文中涉及的接口和字段都做了简化处理,适合用于内部安全评审、研发自查和测试环境验证,不涉及真实系统攻击。问题场景某业务系统采用前后端分离架构,后端是 Spring Boot,认证方式为 JWT。用户登录后,前端会在请求头中携带 token,后端通过拦截器解析用户身份。审计时发现一个订单详情接口,表面上已经要求登录,但没有进一步校验订单归属关系:GET /api/order/detail?id=10086
Authorization: Bearer eyJhbGciOi...接口返回订单基础信息、收货信息、支付状态等敏感数据。如果后端只根据 id 查询订单,而不判断该订单是否属于当前登录用户,就可能形成水平越权。代码结构简化项目里常见的分层结构如下:cont