记一次郁闷的水平越权漏洞修复

前言:

公司最近频繁接受信安考验,好多功能受到攻击,两年前开发的功能也被揪出来当做高危漏洞,记录一下解决的办法,提醒自己不要犯相同的错误。

正文:

什么是越权?

越权就是用户访问到了不应该能访问到的资源。一般分为两类,水平越权和垂直越权。

水平越权一般发生在普通用户之间,用户A可以通过直接调用接口的方式访问到了用户B的信息。垂直越权在管理员中常见,低权限的管理员通过URL或者接口直接调用到了高权限用户才能使用的功能。

我负责的模块出现的是水平越权问题,用户可以通过遍历参数的方式获取到其他用户的信息。两年前我开发这个辅助功能的时候就没什么人用,这个项目也不是很重要,当时都没有越权访问的概念。一年前领导提示要做一些限制, 我又嫌改旧代码太恶心没改,现在项目关键了起来,天天被各种测试,我的功能就有好多坑。真是不听老人言,吃亏在眼前,墨菲定律威力真的巨大。所以发现有坑一定要改,要不然很容易突然天降大锅。

解决水平越权问题的思路:在查询时把结果中的关键参数都用用户的身份信息加密返回,前端用加密过的参数encryptedParam和没加密的参数param一起调用后端接口;在后端把参数param按照规定的方式再次加密获取一个dftEncryptedParam比较encryptedParam和dftEncryptedParam是否相等,如果相等表示验证成功。

注意使用的身份信息不能是http请求的输入参数,需要从session中进行获取。

解决垂直越权问题的思路:为所有的管理员指定角色,同时为每一个角色都指定权限代码。超级管理员的权限代码可能是m.*,而用户信息管理员的权限代码是m.user,将用户的角色和权限信息都放入session中保存。对每个需要权限才能访问的功能都指定好权限代码列表。例如管理员A拥有超级管理员的权限,而管理员B只拥有用户信息管理的权限。假如管理员B想要通过输入URL或者直接调用请求进入到产品信息管理的界面,在实现功能前拦截请求,判断session中当前用户的权限信息是否与接口中指定的权限列表匹配,如果匹配才继续执行。

虽然有以上思路,但是在网站上直接暴露了接口的路径和参数还是很不安全,很容易被攻击。是否可以将前端发出的请求全部加密,由Nginx解密后再路由到后端。

很简单的思路,全当记录啦。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
水平越权漏洞是一种安全漏洞,指的是攻击者通过修改或伪造请求参数、会话标识或其他身份验证机制,以获取未经授权的访问权限或执行特权操作。以下是水平越权漏洞的成因和处置建议: 成因: 1. 不恰当的身份验证和授权机制:系统可能存在缺陷的身份验证和授权机制,未正确验证用户的权限或未正确限制用户的操作范围。 2. 不安全的会话管理:会话标识可能易于猜测、被劫持或未正确管理,导致攻击者能够访问其他用户的会话数据或执行特权操作。 3. 缺乏输入验证和过滤:未正确验证和过滤用户输入,攻击者可以通过修改请求参数实现越权操作。 处置建议: 1. 实施严格的身份验证和授权机制:确保系统正确验证用户身份和权限,并根据用户的权限限制其操作范围。 2. 安全的会话管理:使用随机、复杂且不易预测的会话标识,并确保会话标识在传输和存储过程中得到适当的保护。 3. 输入验证和过滤:对用户输入进行严格验证和过滤,确保只接受有效和预期的输入,并防止攻击者通过修改请求参数来实现越权操作。 4. 最小特权原则:在授权用户时,应遵循最小特权原则,只授予用户完成所需任务所需的最低权限级别。 5. 定期安全审计:对系统进行定期的安全审计,发现和修复可能存在的水平越权漏洞。 6. 持续安全培训和意识提高:教育开发人员、管理员和用户关于水平越权漏洞的风险和防范措施,增强他们对安全问题的意识。 通过以上措施,可以有效减少水平越权漏洞的风险,并提升系统的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值