项目中遇到的水平越权漏洞及修复方法

本文讲述了在ThinkPHP5项目中遇到的水平越权漏洞问题,即用户可以修改其他用户的收货地址。漏洞源于未对请求进行严格权限认证。修复措施包括增加参数验证和用户权限检查,确保只有拥有权限的用户才能修改自己的信息,从而提高了系统的安全性。日常开发中,应重视业务逻辑漏洞和权限管理,避免依赖框架的安全防护。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目基于thinkphp5框架,虽然说框架底层为开发者提供了基本的参数过滤和参数绑定等安全防护。能在很大程度上防范XSS攻击和SQL注入,但在在开发中也应该注意避免产生业务逻辑漏洞和做好用户权限认证。今天在项目中发现了一个安全漏洞:A用户可以修改甚至删除B用户的收货地址。这个漏洞出现的原因是开发者没有对请求进行严格的权限认证,本文主要叙述发现漏洞的过程及修复的方法。

一. 此段代码的逻辑是当收到get请求返回对应 addrId

### 水平越权漏洞的原因及原理 水平越权漏洞(Horizontal Privilege Escalation)指的是同一权限等级内的不同用户之间发生的数据或功能访问超越了应有的边界。具体来说,当应用程序未能正确验证当前用户的标识符或其他唯一识别信息时,可能导致一个普通用户可以访问其他同级用户的敏感数据或执行不应被允许的操作[^3]。 #### 原因分析 1. **缺乏有效的身份验证机制** 如果系统仅依赖于前端传递的身份标识(如URL中的ID参数),而未在服务器端进行严格的校验,则容易受到攻击者的利用。例如,在查看订单详情页面时,如果只是简单地信任客户端提交的商品编号而不做进一步确认,那么恶意用户就可以轻易更改这个编号来窥探别人的订单情况[^4]。 2. **不安全的对象引用** 当程序设计人员假设某些对象引用(Object Reference, OR)是私密的或是难以猜测到的时候,实际上这些OR可能会暴露给未经授权的人士。比如文件路径、数据库记录索引等都属于此类潜在风险点。一旦这类信息泄露出去,并且服务端又缺少必要的防护措施的话,就会形成安全隐患[^1]。 3. **业务逻辑错误** 开发过程中可能存在一些疏忽之处,使得即使是在正常流程下也有可能触发越权行为。例如,在社交网络平台上实现好友间的消息发送功能时如果没有仔细考虑消息接收方的有效性和合法性判断条件,就可能让非朋友关系之间的用户互相通信,进而造成隐私侵犯等问题[^2]。 ```python # 不推荐的做法:直接使用未经验证的用户输入作为查询条件 def get_user_profile(user_id): profile = db.query(f"SELECT * FROM users WHERE id={user_id}") return profile # 推荐做法:加入额外的安全检查以防止横向越权 def secure_get_user_profile(current_user_id, target_user_id): if not is_friend_of(current_user_id, target_user_id): # 额外增加的好友关系验证 raise PermissionDeniedError() profile = db.query(f"SELECT public_info FROM users WHERE id={target_user_id}") # 只返回公开的信息字段 return profile ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值